首先,需要重写hashcode的前提是你得数据的存储时存放在哈希表中的。如果不是这样的话,其实没必要重写hashcode的。
放在HashMap和Hashtable里面如果是作为value而不是作为key的话也是不必重写 hashCode了。至于HashSet,实际上它只是忽略value的HashMap,每次HashSet.add(o)其实就是HashMap.put(o, dummyObject)。HashMap中的key是HashSet来实现的。它的存储方式是用哈希表来存储的。
因为每次get()和put()的时候HashMap既要看equals()是不是true也要看hashcode是不是一致。
每个对象都有一个哈希吗hashcode。相同的对象哈希吗hashcode一定相同,但有相同的哈希吗不一定是相同的对象。那么如果两个对象equals,那么他们的hashCode()必须相等;但hashCode()相等时,equals不一定要相等。 |