关于equals相等则hashcode必须相等的总结
如果你的class永远不可能放在hash code为基础的容器内作为KEY,不必劳神,您真的不必override hashCode()
所以可以通过重写equals()方法来判断对象的值是否相等,但是有一个要求:equals()方法实现了等价关系,即:
自反性:对于任何非空引用x,x.equals(x)应该返回true;
对称性:对于任何引用x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true;
传递性:对于任何引用x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true;
一致性:如果x和y引用的对象没有发生变化,那么反复调用x.equals(y)应该返回同样的结果;
非空性:对于任意非空引用x,x.equals(null)应该返回false;
*
* hashmap hashtable
* 至于HashSet,实际上它只是忽略value的HashMap,每次HashSet.add(o)其实就是HashMap.put(o, dummyObject)。
*
*
*
如果不重写hashcode()方法的话就会在数组不同下标的链表下存在相同的对象(equals相等) 如在存储散列集合时(如Set类),将会存储了两个值一样的对象,导致混淆,因此,就也需要重写hashcode()
put方法如果指定的KEY已经有值再次put会把old的替换掉。
Associates the specified value with the specified key in this map.
If the map previously contained a mapping for the key, the old value is replaced.

浙公网安备 33010602011771号