一、HashSet
HashSet 底层就是HashMap(key 存元素,value 是同一个空对象)。所以元素不可重复、无序(LinkedHashSet 保插入序,TreeSet 保排序)。
Set<String> s = new HashSet<>();
s.add("a"); s.contains("a"); s.remove("a");
二、TreeSet
基于 TreeMap(红黑树),元素按自然顺序或 Comparator 排序,增删查 O(log n)。
三、去重原理
添加时先算 hashCode 找桶,再用 equals 比较;所以存入自定义对象必须重写 hashCode 和 equals,否则按对象地址判断、去重失效。