約定:在每個覆蓋了equals方法的類中,也必須覆蓋hashCode方法
- 相等的對象必須具有相等的散列碼。
- 不等的對象不一定有都等的散列碼(通常不相等)
- 使用equals中的比較字段來計算散列碼
class Cat{
private String name;
private int age;
public Cat(String name, int age){
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(obj == this) return true; //如果引用相等,即同一對象,肯定相等
if(!(obj instanceof Cat)) return false; //檢查obj是否爲null,類型是否相同
Cat cat = (Cat) obj;
return cat.age == this.age && cat.name.equals(this.name);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age; //計算規則
result = prime * result + ((name == null) ? 0 : name.hashCode()); //計算規則
return result;
}
}
其實,hashCode在別的地方也沒什麼用,只是在HashTable、HashMap、HashSet中用來尋找數據位置的,就是哈希表中的哈希值。