如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?

如果两个对象具有相同的哈希码,但是不相等的,它们可以在HashMap中同时存在吗?

----答案是 可以

原因:

在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。

这里不可以重复是说equals和hashcode只要有一个不等就可以了。

例子:

TestObject t1= new TestObject();
t1.A=1;
TestObject t2= new TestObject();
t1.A=2;
Map map= new HashMap();

 

@Override
public int hashCode() {
return 5;
}
 

map.put(t1, "A");
map.put(t2,"B");

System.out.println(map.get(t1));
System.out.println(map.get(t2));

 

----A

      B

一、当我们向一个set、HashMap、HashSet、HashTable集合中添加某个元素,集合会首先调用该对象的hashCode方法,

这样就可以直接定位它所存储的位置,若该处没有其他元素,则直接保存。
若该处已经有元素存在,就调用equals方法来匹配这两个元素是否相同,相同则不存,不同则散列到其他位置

二、hashCode重要么?
对于List集合、数组而言,他就是一个累赘,不重要;但是对于HashMap、HashSet、HashTable而言,它变得异常重要。

posted @ 2014-04-03 23:10  嗨,你的益达~~~  阅读(8521)  评论(0编辑  收藏  举报