文章均为本人技术笔记,转载请注明出处:https://segmentfault.com/u/yzwalljava
HashSet是一个没有重复元素的集;
HashSet能够存储null元素,不保证元素插入顺序;
HashSet线程不安全的(因为底层由HashMap实现);segmentfault
HashSet底层采用HashMap存储:private transient HashMap<E,Object> map
。HashSet存储元素实际为TreeMap存储的键值对为<key,PRESENT>
的key;,PRESENT为固定对象:private static final Object PRESENT = new Object()
;
因为HashMap中key不可重复,从而实现HashSet元素不可重复;安全
HashSet支持迭代器和foreach两种遍历方式:this
// 遍历HashSet:迭代器实现 Iterator iter = set.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); } // 遍历HashSet:foreach实现 for (Integer i : set) { System.out.println(i); }
TreeSet是一个有序集,基于TreeMap实现,是线程不安全的;线程
TreeSet支持两种两种排序方式,经过不一样构造器调用实现code
天然排序:对象
public TreeSet() { // 新建TreeMap,天然排序 this(new TreeMap<E,Object>()); }
Comparator排序:排序
public TreeSet(Comparator<? super E> comparator) { // 新建TreeMap,传入自定义比较器comparator this(new TreeMap<>(comparator)); }
TreeSet底层采用TreeMap存储,构造器启动时新建TreeMap。TreeSet存储元素实际为TreeMap存储的键值对为<key,PRESENT>
的key;,PRESENT为固定对象:private static final Object PRESENT = new Object()
get
TreeSet支持正向/反向迭代器遍历和foreach遍历it
// 顺序TreeSet:迭代器实现 Iterator iter = set.iterator(); while (iter.hasNext()) { System.out.println(iter.next()); } // 顺序遍历TreeSet:foreach实现 for (Integer i : set) { System.out.println(i); } // 逆序遍历TreeSet:反向迭代器实现 Iterator iter1 = set.descendingIterator(); while (iter1.hasNext()) { System.out.println(iter1.next()); }