如果兩個對象具有相同的哈希碼,但是不相等的,它們可以在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而言,它變得異常重要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM