在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经典用法总结相关推荐

  1. mysql的高阶用法_MySQL的经典用法(十四)-高级优化

    mysql的经典用法(十四)----高级优化 基于 /application/search/mysql/mysql-5.5.28/support-files/my-innodb-heavy-4G.cn ...

  2. 2020-12-17 【 java优先队列的用法】

    java优先队列的用法 peek是top() 只取最上面的元素 poll是pop() 弹出 add是添加 push 类的比较器,相对于仿函数 struct cmp{ bool operator ()( ...

  3. java handler的用法_Handler和内部类的正确用法

    PS:本文摘抄自<Android高级进阶>,仅供学习使用 Android代码中涉及线程间通信的地方经常会使用Handler,典型的代码结构如下. 1 2 3 4 5 6 7 8 9 pub ...

  4. 四种Java线程池用法解析

    四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...

  5. java中import用法

    java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...

  6. java list用法_java list的用法详解

    java list的用法详解 java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中.以下是百分网小编搜索整理的关于java list的用法详解,需要的朋友可以参考一下!想了解更多相关 ...

  7. JAVA中this用法小结

    我知道很多朋友都和我一样:在JAVA程序中似乎经常见到"this",自己也偶尔用到它,但是到底"this"该怎么用,却心中无数!很多人一提起它,就说" ...

  8. java中include标签的用法_原 ng-include用法分析以及多标签页面的简单实现方式

    在平时的项目开发中,应该会经常遇到上图所示的需求,就是在一个页面中有多个标签,被选中的标签颜色会高亮显示,切换不同标签显示相应的不同内容.如果内容代码过多则写在同一个html文件就会显得特别乱,所以这 ...

  9. java.nio.ByteBuffer用法小结

    转载自  java.nio.ByteBuffer用法小结 在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信道(SocketChannel)将数据读入缓冲区,写入时首先要将发送的数据按顺序填入 ...

  10. Java Spring IOC用法

    Java Spring IOC用法 Spring IoC 转载于:http://www.cnblogs.com/flowwind/p/4772375.html 在前两篇文章中,我们讲了java web ...

最新文章

  1. 支付宝分库分表中间件--zdal简介
  2. 纲:散户炒股存两大弱势 我自己不炒也不建议小散炒
  3. asp.net的dropDownlist只显示第一个字
  4. 关于怎么怎么把 unsingned char 数据转换为 Opencv 的Mat类型,并且吧图像显示出来
  5. IDEA版本控制工具VCS中使用Git,以及快捷键总结(不使用命令)
  6. POJ 1741 Tree(树的点分治)
  7. 坦克大战之继承的实现
  8. HTML5珠子走出迷宫小游戏代码
  9. BT文件分享服务器,bt是什么意思服务(bt资源库)
  10. c语言alpha通道的用法,alpha通道最主要的用途是什么
  11. 循环时尚是消费者与电商平台的一场“双向奔赴”?
  12. html模板生成工具_HTML5模板生成器,框架和工具
  13. 快速获取SAS数据集观测数
  14. git aliases
  15. 报错Content type ‘multipart/form-data;boundary=----WebKitFormBoundaryTz0sivpVO7U0H70m;charset=UTF-8‘ n
  16. 国标PS流解包(解封装)代码
  17. 沁恒触摸蓝牙模块方案测试体验(CH582)
  18. Source Insight背景颜色设置成保护色
  19. Ubuntu 18.04安装显卡驱动
  20. 卖不动的江某白,还能靠什么打动年轻人?

热门文章

  1. 【C++】PAT乙级:1012 数字分类 (20 分)
  2. 大数据24小时:链家研究院发布地产大数据产品Real Data,上海交大与依图共建AI联合实验室
  3. 使用Java计算生辰八字五行属性
  4. css水墨背景,PS古风水墨背景教程
  5. vim插入模式小技巧
  6. Linux 常用指令
  7. ESP32-CAM拍照输出RGB565数据,wifi传输到stm32控制tft屏显示拍照图像
  8. iPhone12与mate40,你pick哪一款?
  9. html字体播放,html-字体
  10. BP神经网络实用性操作(四步模板)和主要网络参数介绍