HahsSet+LinkedHashSet+TreeSet
·
1.HashSet
HashSet是基于HashMap来实现的,实现了Set接口,同时还实现了序列化和可克隆化。而集合(Set)是不允许重复值的。
所以HashSet是一个没有重复元素的集合,但不保证集合的迭代顺序,所以随着时间元素的顺序可能会改变。
由于HashSet是基于HashMap来实现的,所以允许空值HashSet,不是线程安全的。
HashSet 是 HashMap 的 key 集合的「语义视图」,它不「取」(copy/extract)key,而是「强制将元素作为 key 存入 HashMap」,且 value 固定为哑值 PRESENT。
PRESENT 是一个「不可变的、无意义的、全局共享的哨兵对象(sentinel object)」,它的存在只为回答一个问题
2.LinkedHashSet
LinkedHashSet是HashSet的「有序版本」,它牺牲少量内存(+16B/元素)和微小构造开销,换来了O(1)查找 +O(1)插入顺序迭代的完美组合。
3.TreeSet
✅
TreeSet<E>是NavigableSet<E>接口的实现类,其唯一状态是一个private final TreeMap<E,Object> m;实例;它将所有add(e)、contains(e)、iterator()等操作,完全委托给m.put(e, PRESENT)和m.navigableKeySet().iterator();TreeSet的「有序」,就是TreeMap中key按Comparable或Comparator排序后的自然遍历顺序。
更多推荐




所有评论(0)