常見的Collection的實現體系

註釋:藍色表示實現類,紅色框表示接口

Set接口)

    Set接口的存儲形式是不允許元素重複,並且不記錄數據存入的先後順序。而list接口的存儲形式允許元素重複,並且記錄數據存入的先後順序。我們知道list接口的實現類是基於數組存儲的,每存入一個數據,其將會根據索引存入數組相應的位置。其實set接口的實現類也是基於數組存儲的,但他存儲時並不會直接按索引去存儲數據,而是先檢測數據是否重複(爲什麼存在這種結構,例如存儲學號,就不允許重複,如果我們使用list還得自己去寫重複檢測機制),如果不重複則添加數據。而添加時,他是根據hash算法添加的,即每個對象都有自己的hashCode,我們可以根據hashCode去尋找索引,即對象——hashCode——索引(此處橫線表示一種映射),這樣一來我們就說其實Set也是基於數組存儲的,他有什麼好處呢:

比如說: 0 9 78 23

如果我麼用數組查詢一個23的索引,則我們用for如循環循環四次,遍歷即可,

但如果我們用hash查找時只需index=F(hashCode),hashCode=F(對象);通過計算即可。

問題:我們想set集合中添加基本類型時,set是如何判斷兩個元素是否相同的?

    

運行結果:

如此說明斯特中是靠判斷equals和hashCode兩個標準判定的。

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