如果我運行下面的代碼,那麼輸出是2,這意味着該集合包含2個元素。不過我認爲該集應該包含1,因爲兩個對象基於hashcode()值以及.equals()
方法都是相等的。 似乎在我的理解中出現了一些明顯的錯誤?Java:添加到集合中的重複對象?
package HELLO;
import java.util.HashSet;
import java.util.Set;
public class Test {
public static void main(String[] args) throws Exception {
Set<Alpha> s = new HashSet<Alpha>();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();
s.add(a1);
s.add(a2);
System.out.println(s.size());
}
}
class Alpha {
int a = 10;
public int hashcode() {
return a;
}
public boolean equals(Object obj) {
return (obj instanceof Alpha && ((Alpha) obj).a == this.a);
}
public String toString() {
return "Alpha : " + a;
}
}
謝謝!永遠不會忘記使用@Override :) – 2013-05-09 16:33:59
@snow_leopard:這是一個很好的習慣。祝你好運! – 2013-05-09 16:38:25
除了「@Override」之外,我還必須在equals函數中添加一行,否則該集無法檢測到重複項,並始終包含多次具有相同內容的對象:if(this.hashCode()== msg。 hashCode()) return true; – 2015-01-21 08:32:33