我正在將對象添加到hashSet,iam覆蓋hashcode()和equals()。我有意在這些對象相等但仍添加到hashSet?
哈希碼傳遞不同的實例變量是差異但對象相等仍然是既在HashSet的插入
代碼:
HashSet hs = new HashSet();
employee e1 = new employee();
employee e2 = new employee();
e1.setname("amol1"); e1.setcity("bombay");
e2.setname("amol1"); e2.setcity("delhi");
System.out.println("e1 --> "+e1.hashCode()+ " and e2 --> " +e2.hashCode() + " " + e1.equals(e2));
hs.add(e1); hs.add(e2)
重寫的方法:
@Override
public int hashCode()
{
return city.hashCode();
}
@Override
public boolean equals(Object o)
{
employee e = (employee)o;
return getname().equalsIgnoreCase(e.getname());
}
它們可能具有相同的'name'(因此是「相等」),但它們有不同的'hashCode's!所以他們去不同的桶,平等不檢查。 –
不等於在hashSet中添加對象的優先級...我在headfirst中讀取 – Amol
@BenjaminLowry他想知道爲什麼即使它們具有相同的值,對象也會被添加。 –