hashCode与eqauls

<1>、hashCode

1.用途:hashCode()方法用于计算对象的哈希码

2.hashCode()在哈希表中起作用,如java.util.HashMap。

   如果对象在equals()中使用的信息都没有改变,那么hashCode()值始终不变。

   如果两个对象使用equals()方法判断为相等,则hashCode()方法也应该相等。

   如果两个对象使用equals()方法判断为不相等,则不要求hashCode()也必须不相等;但是开发人员  应该认识到,不相等的对象产生不相同的hashCode可以提高哈希表的性能。

3.作用:当我们向哈希表(如HashSet、HashMap等)中添加对象object时,首先调用hashCode()方法计算object的哈希码,通过哈希码可以直接定位object在哈希表中的位置(一般是哈希码对哈希表大小取余)。如果该位置没有对象,可以直接将object插入该位置;如果该位置有对象(可能有多个,通过链表实现),则调用equals()方法比较这些对象与object是否相等,如果相等,则不需要保存object;如果不相等,则将该对象加入到链表中。

<2>、equal

1.用途:equals()方法用于判断两个对象是否相等

2.自反性:x.equals(x)必须返回true。

   对称性:x.equals(y)与y.equals(x)的返回值必须相等。

   传递性:x.equals(y)为true,y.equals(z)也为true,那么x.equals(z)必须为true。

   一致性:如果对象x和y在equals()中使用的信息都没有改变,那么x.equals(y)值始终不变。

   非null:x不是null,y为null,则x.equals(y)必须为false。

<3>、equals()和hashCode()都不是final方法,都可以被重写。

posted @ 2018-05-06 16:45  Jinxzzzz  阅读(103)  评论(0编辑  收藏  举报