compare用法java,Java经典用法总结
在Java编程中,有些知识并不能仅通过语言规范或者标准API文档就能学到的,本文为大家罗列。
一、实现
1、现equals()
?
参数必须是Object类型,不能是外围类。
foo.equals(null) 必须返回false,不能抛NullPointerException。(注意,null instanceof 任意类 总是返回false,因此上面的代码可以运行。)
基本类型域(比如,int)的比较使用 == ,基本类型数组域的比较使用Arrays.equals()。
覆盖equals()时,记得要相应地覆盖 hashCode(),与 equals() 保持一致。
2、现hashCode()
?
当x和y两个对象具有x.equals(y) == true ,你必须要确保x.hashCode() == y.hashCode()。
根据逆反命题,如果x.hashCode() != y.hashCode(),那么x.equals(y) == false 必定成立。
你不需要保证,当x.equals(y) == false时,x.hashCode() != y.hashCode()。但是,如果你可以尽可能地使它成立的话,这会提高哈希表的性能。
hashCode()最简单的合法实现就是简单地return 0;虽然这个实现是正确的,但是这会导致HashMap这些数据结构运行得很慢。
3、实现compareTo()
?
总是实现泛型版本 Comparable 而不是实现原始类型 Comparable 。因为这样可以节省代码量和减少不必要的麻烦。
只关心返回结果的正负号(负/零/正),它们的大小不重要。
Comparator.compare()的实现与这个类似。
4、实现clone()
?
使用 super.clone() 让Object类负责创建新的对象。
基本类型域都已经被正确地复制了。同样,我们不需要去克隆String和BigInteger等不可变类型。
手动对所有的非基本类型域(对象和数组)进行深度复制(deep copy)。
实现了Cloneable的类,clone()方法永远不要抛CloneNotSupportedException。因此,需要捕获这个异常并忽略它,或者使用不受检异常(unchecked exception)包装它。
不使用Object.clone()方法而是手动地实现clone()方法是可以的也是合法的。
二、预防性检测
1、预防性检测(Defensive checking)数值
?
不要认为输入的数值都是正数、足够小的数等等。要显式地检测这些条件。
一个设计良好的函数应该对所有可能性的输入值都能够正确地执行。要确保所有的情况都考虑到了并且不会产生错误的输出(比如溢出)。
2、预防性检测对象
?
不要认为对象参数不会为空(null)。要显式地检测这个条件。
3、预防性检测数组索引
?
不要认为所以给的数组索引不会越界。要显式地检测它。
4、预防性检测数组区间
?
不要认为所给的数组区间(比如,从off开始,读取len个元素)是不会越界。要显式地检测它。
三、数组
1、填充数组元素
使用循环:
?
2、复制一个范围内的数组元素
使用循环:
?
3、调整数组大小
使用循环(扩大规模):
?
使用循环(减小规模):
?
(优先)使用标准库的方法:
?
4、把4个字节包装(packing)成一个int
?
5、把int分解(Unpacking)成4个字节
?
总是使用无符号右移操作符(>>>)对位进行包装(packing),不要使用算术右移操作符(>>)。
以上就是本文的全部内容,希望对大家的学习有所帮助。
compare用法java,Java经典用法总结相关推荐
- mysql的高阶用法_MySQL的经典用法(十四)-高级优化
mysql的经典用法(十四)----高级优化 基于 /application/search/mysql/mysql-5.5.28/support-files/my-innodb-heavy-4G.cn ...
- 2020-12-17 【 java优先队列的用法】
java优先队列的用法 peek是top() 只取最上面的元素 poll是pop() 弹出 add是添加 push 类的比较器,相对于仿函数 struct cmp{ bool operator ()( ...
- java handler的用法_Handler和内部类的正确用法
PS:本文摘抄自<Android高级进阶>,仅供学习使用 Android代码中涉及线程间通信的地方经常会使用Handler,典型的代码结构如下. 1 2 3 4 5 6 7 8 9 pub ...
- 四种Java线程池用法解析
四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...
- java中import用法
java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...
- java list用法_java list的用法详解
java list的用法详解 java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中.以下是百分网小编搜索整理的关于java list的用法详解,需要的朋友可以参考一下!想了解更多相关 ...
- JAVA中this用法小结
我知道很多朋友都和我一样:在JAVA程序中似乎经常见到"this",自己也偶尔用到它,但是到底"this"该怎么用,却心中无数!很多人一提起它,就说" ...
- java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式
在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容.如果内容代码过多则写在同一个html文件就会显得特别乱,所以这 ...
- java.nio.ByteBuffer用法小结
转载自 java.nio.ByteBuffer用法小结 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入 ...
- Java Spring IOC用法
Java Spring IOC用法 Spring IoC 转载于:http://www.cnblogs.com/flowwind/p/4772375.html 在前两篇文章中,我们讲了java web ...
最新文章
- 支付宝分库分表中间件--zdal简介
- 纲:散户炒股存两大弱势 我自己不炒也不建议小散炒
- asp.net的dropDownlist只显示第一个字
- 关于怎么怎么把 unsingned char 数据转换为 Opencv 的Mat类型,并且吧图像显示出来
- IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
- POJ 1741 Tree(树的点分治)
- 坦克大战之继承的实现
- HTML5珠子走出迷宫小游戏代码
- BT文件分享服务器,bt是什么意思服务(bt资源库)
- c语言alpha通道的用法,alpha通道最主要的用途是什么
- 循环时尚是消费者与电商平台的一场“双向奔赴”?
- html模板生成工具_HTML5模板生成器,框架和工具
- 快速获取SAS数据集观测数
- git aliases
- 报错Content type ‘multipart/form-data;boundary=----WebKitFormBoundaryTz0sivpVO7U0H70m;charset=UTF-8‘ n
- 国标PS流解包(解封装)代码
- 沁恒触摸蓝牙模块方案测试体验(CH582)
- Source Insight背景颜色设置成保护色
- Ubuntu 18.04安装显卡驱动
- 卖不动的江某白,还能靠什么打动年轻人?