覆蓋equals時總要覆蓋hashCode

約定:在每個覆蓋了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中用來尋找數據位置的,就是哈希表中的哈希值。

發佈了42 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章