java8 常用集合类汇总详解之Set

接上一篇文章《java8 常用集合类汇总详解之List》,本文介绍集合Set。

Set的实现类主要是HashSet、TreeSet、LinkedHashSet、CopyOnWriteArraySet。
Set有一个最大的特点就是没有重复元素。 因此可以使用Set去重。
Set接口没有提供像List.get()一样直接获得某个指定元素的方法,不过它提供遍历所有元素的方法。

1、HashSet

HashSet其实是基于HashMap实现的,下面是该类的构造方法:

	public HashSet() {
        map = new HashMap<>();
    }

该类的所有操作都委托给HashMap完成。
HashMap的key记录HashSet的元素,value都是Object对象。下面是属性map和Object对象的定义:

    private transient HashMap<E,Object> map;
    private static final Object PRESENT = new Object();

下面是add方法新增一个元素,可以看到value永远都是PRESENT:

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

2、TreeSet

TreeSet也是基于TreeMap实现的,该类的所有操作都委托给TreeMap完成,也是使用TreeMap的key记录TreeSet的元素,value都是Object对象。

3、LinkedHashSet

LinkedHashSet是HashSet的子类,LinkedHashSet基于LinkedHashMap实现,该类的所有操作都委托给LinkedHashMap完成。
如果不指定初始容量,默认初始容量为16。

前面三个类都是基于Map实现的,因为Map的key天然具有不重复的特性,因此可以保证集合中元素不相等。

4、CopyOnWriteArraySet

CopyOnWriteArraySet内部使用CopyOnWriteArrayList存储元素,其所有的操作也是委托给CopyOnWriteArrayList完成,基本都是调用CopyOnWriteArrayList中的同名方法。
CopyOnWriteArrayList可以参见文章《java8 常用集合类汇总详解之List》

    private final CopyOnWriteArrayList<E> al;

    /**
     * Creates an empty set.
     */
    public CopyOnWriteArraySet() {
        al = new CopyOnWriteArrayList<E>();
    }

向CopyOnWriteArraySet中插入元素前,会先比较集合中当前已有的元素,如果有相等的元素,则不插入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值