java习惯用法总结

java习惯用法总结

ID:31685845

大小:72.84 KB

页数:17页

时间:2019-01-17

java习惯用法总结_第1页
java习惯用法总结_第2页
java习惯用法总结_第3页
java习惯用法总结_第4页
java习惯用法总结_第5页
资源描述:

《java习惯用法总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、在Java编程中,有些知识并不能仅通过语言规范或者标准API文档就能学到的。在本文中,我会尽量收集一些最常用的习惯用法,特别是很难猜到的用法。(JoshuaBloch的《EffectiveJava》对这个话题给出了更详尽的论述,可以从这本书里学习更多的用法。)我把本文的所有代码都放在公共场所里。你可以根据自己的喜好去复制和修改任意的代码片段,不需要任何的凭证。目录•实现:oequals()ohashCode()ocompareTo()oclone()•应用:oStringBuilder/StringBufferoRand

2、om,nextlnt(int)oIterator,remove()oStringBuilder.reverse()oThread/Runnableotry-finally•输入/输出:o从输入流里读取字节数据o从输入流里读取块数据o从文件里读取文本o向文件里写文本•预防性检测:O数值O对象O数组索引O数组区间•数组:O填充元素O复制一个范围内的数组元素O调整数组大小•包装o个字节包装成一个into分解成4个字节实现equals()classPerson{Stringname;intbirthYcar;byte[]raw;

3、publicbooleanequals(Objectobj){if(!objinstanceofPerson)returnfalse;Personother=(Person)obj:returnname.equals(other.name)&&birthYear==other・birthYear&&Arrays.equals(raw,other.raw);publicinthashCode0{・•・}•参数必须是Object类型,不能是外围类。•foo.equals(null)必须返回false,不能抛NullPoint

4、erExceptiono(注意,nullinstanceof任意类总是返回false,因此上面的代码可以运行。)•基本类型域(比如,int)的比较使用==,基本类型数组域的比较使用Arrays,equals()o•覆盖equals()时,记得要相应地覆盖hashCode(),与equals()保持一致。•参考:java・lang・Object・equals(Object)。实现hashCode()classPerson{Stringa;Objectb;bytec;int[]d;publicinthashCode0(ret

5、urna.hashCode()+b・hashCode()+c+Arrays・hashCode(d);}publicbooleanequals(Objecto){・・・}}•当x和y两个对象具有x.equals(y)=true,你必须要确保x.hashCode()==y.hashCode()0根据逆反命题,如果x.hashCode()!=y.hashCode(),那么x.equals(y)==false必定成立。•你不需要保证,当x.equals(y)==false时,x.hashCode()!=y.hashCode()o

6、但是,如果你可以尽可能地使它成立的话,这会提高哈希表的性能。•hashCode0最简单的合法实现就是简单地return0;虽然这个实现是正确的,但是这会导致HashMap这些数据结构运行得很慢。•参考:java・lang・Object・hashCode()。实现compareTo()classPersonimplementsComparab1e{StringfirstName;StringlastName;intbirthdate;//ComparebyfirstName,breaktiesbylastN

7、ame,finallybreaktiesbybirthdatepublicintcompareTo(Personother){if(firstName.compareTo(other.firstName)!=0)returnfirstName・compareTo(other・firstName);elseif(lastNamc.compareTo(other・1astNamc)!=0)returnlastName・compareTo(other・lastName);elseif(birthdate

8、date)returnT;elseif(birthdate>other.birthdate)return1:elsereturn0;总是实现泛型版本Comparable而不是实现原始类型Comparable。因为这样可以节省代码量和减少不必要的麻烦。•只关心返回结果的正负号(负/零/正),它们的大小不重要。•Comp

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。