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