Set集合實現元素不重複原理

衆所周知,set內容不重複。以hashSet爲例,會使用對象的hashCode()與equals()來判斷存入的對象是否相同。流程如下:
要存入元素,內存中開設空間,每個空間都會有對應的Hash Code,這些空間成爲哈希桶(Hash Bucket)。
這裏寫圖片描述
對想要存入HashSet回調用對象的hashCode()獲取對應的哈希值,並嘗試放入對應的哈希桶中,如果哈希桶中沒有對象,則直接放入,如果有,會再調用對象的equals()比較。
這裏寫圖片描述
桶中的對象調用equals()與要傳入的對象進行比較,若比較結果爲false,則表示兩個對象非重複,可以存入,若結果爲true,表示兩個對象相同,不可存入。

例:
學生類(Student),爲了防止收集重複對象,在Student類中複寫hashCode()和equals():

 class Studen{
    private String name ;//姓名
    private int age;//年齡

    public int hashCode(){
        return name.hashCode()+age*33;
    }       
    public boolean equals(Object obj){
        if(!(obj instanceof Student))
            throw new ClassCastException("類型不匹配");
        Student s=(Student) obj;
        return this.name.equals(s.name) &&this.age==s.age;          
    }
}

如果之後出現重複對象想要被收集時,要存入對象便會和已存在容器內的對象比較,如果相同則不能再存入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章