[英]Hashcode , equals contract in java
public class VO {
public int hashcode()
{
return 0;
}
public boolean equals(Object obj)
{
return true;
}
public static void main(String args[])
{
VO vo1 = new VO();
VO vo2 = new VO();
Map<VO,Integer> map = new HashMap<VO, Integer>();
map.put(vo1, 1);
map.put(vo2, 1);
System.out.println(map.size());
}
}
我得到的輸出是:2
但是據我所知輸出是1。
當我在地圖上放置一個元素時,它將檢查密鑰的哈希碼,如果該哈希碼相同,則它將去檢查是否等於。如果兩種方法返回的結果相同,它將覆蓋先前的值。
在我的情況下,這兩個方法are(hashcode and equals)返回0和true。所以最后在映射中必須有一個元素。但是在這里我得到的大小是2。
可能是什么原因。謝謝...
您沒有覆蓋Object.hashCode
,而是實現了自己的hashcode()
方法(請注意大寫的C)。
一個好的做法是在@Override
時始終使用@Override
批注。 請參閱: 什么時候使用Java的@Override注釋,為什么?
hashcode()
( 帶有小“ c” )僅用作常規方法,而是調用對象類方法hashCode() 。
public class VO {
@Override
public int hashCode() {
return 0;
}
@Override
public boolean equals(Object obj) {
return true;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.