一.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。