区别
-
HashSet:
- 使用哈希表实现,元素无序存储。
- 通过哈希码来存储和检索元素,因此查找速度很快。
- 不保证元素的顺序,迭代顺序可能与插入顺序不同。
- 不允许重复元素,即相同的元素只会存储一个。
- 不保证元素的顺序性,适合快速查找、去重的场景。
-
LinkedHashSet:
- 在
HashSet的基础上加入了链表来维护元素的插入顺序。 - 元素插入的顺序会影响元素的迭代顺序,保持了插入顺序。
- 通过哈希码来存储和检索元素,查找速度很快。
- 不允许重复元素,即相同的元素只会存储一个。
- 适合需要保持插入顺序的场景。
- 在
-
TreeSet:
- 基于红黑树实现,元素按照自然顺序或指定的比较器顺序有序存储。
- 插入、删除、查找操作的平均时间复杂度为 O(log N),比哈希表的查找更稳定。
- 元素按照排序顺序迭代,可以快速获取一定范围内的元素。
- 不允许重复元素,会按照比较器或元素的自然顺序进行去重。
- 适合需要排序和有序集合的场景。
去重原理
因为 HashMap 不允许重复的键,所以当多次添加相同的元素时,只会保留一个键。通过这种方式,HashSet 实现了对元素的去重。