HashSet & TreeSet小结

HashSet & TreeSet小结

声明

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

HashSet小结

HashSet简介

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

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

// 遍历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支持两种两种排序方式,通过不同构造器调用实现

  • 自然排序:

    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()


TreeSet遍历方式

TreeSet支持正向/反向迭代器遍历和foreach遍历

// 顺序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());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值