HashSet & TreeSet小结

HashSet & TreeSet小结

声明

文章均为本人技术笔记,转载请注明出处:https://segmentfault.com/u/yzwalljava

HashSet小结

HashSet简介

HashSet是一个没有重复元素的集
HashSet能够存储null元素,不保证元素插入顺序;
HashSet线程不安全的(因为底层由HashMap实现);segmentfault

HashSet底层实现

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遍历方式

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小结

TreeSet是一个有序集,基于TreeMap实现,是线程不安全的;线程

TreeSet有序性实现

TreeSet支持两种两种排序方式,经过不一样构造器调用实现code

  • 天然排序:对象

public TreeSet() {
        // 新建TreeMap,天然排序
        this(new TreeMap<E,Object>());
    }
  • Comparator排序:排序

public TreeSet(Comparator<? super E> comparator) {
        // 新建TreeMap,传入自定义比较器comparator
        this(new TreeMap<>(comparator));
    }

TreeSet底层实现

TreeSet底层采用TreeMap存储,构造器启动时新建TreeMap。TreeSet存储元素实际为TreeMap存储的键值对为<key,PRESENT>的key;,PRESENT为固定对象:private static final Object PRESENT = new Object()get


TreeSet遍历方式

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());
}
相关文章
相关标签/搜索