Java學習(28) -- 源碼閱讀(HashSet&LinkedHashSet&TreeSet)

一.HashSet

特點:

1.HashSet中不能有相同的元素,可以有一個Null元素,存入的元素是無序的。

2.HashSet如何保證唯一性?

1).HashSet底層數據結構是哈希表,哈希表就是存儲唯一系列的表,而哈希值是由對象的hashCode()方法生成。

2).確保唯一性的兩個方法:hashCode()和equals()方法。

3.添加、刪除操作時間複雜度都是O(1)。

4.非線程安全

源碼解析請參考:https://blog.csdn.net/m0_37884977/article/details/80562727

二.LinkedHashSet

特點:

1.LinkedHashSet中不能有相同元素,可以有一個Null元素,元素嚴格按照放入的順序排列。

2.LinkedHashSet如何保證有序和唯一性?

1).底層數據結構由哈希表和鏈表組成。

2).鏈表保證了元素的有序即存儲和取出一致,哈希表保證了元素的唯一性。

3.添加、刪除操作時間複雜度都是O(1)。

4.非線程安全

源碼解析請參考:https://blog.csdn.net/zhaojie181711/article/details/80510129

三.TreeSet

特點:

1.TreeSet是中不能有相同元素,不可以有Null元素,根據元素的自然順序進行排序。

2.TreeSet如何保證元素的排序和唯一性?

底層的數據結構是紅黑樹(一種自平衡二叉查找樹)

3.添加、刪除操作時間複雜度都是O(log(n))

4.非線程安全

源碼解析請參考:https://blog.csdn.net/dch9210/article/details/50951690

四.總結:

通過以上特點可以分析出,三者都保證了元素的唯一性,如果無排序要求可以選用HashSet;如果想取出元素的順序和放入元素的順序相同,那麼可以選用LinkedHashSet。如果想插入、刪除立即排序或者按照一定規則排序可以選用TreeSet。
 

 

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