Java 基础学习笔记 —— 集合框架中的Set

引言

继上篇文章讲过了Java中的Map之后,接下来我们会关注另外一种集合类型——Set。

Set直译就是集合的意思,代表中不存在重复元素的一个组合。这个定义与我们上篇文章要中介绍的Map中的key定义一致。在Map中,Key也是唯一的。所以Set也大多包含了Map

下面是Set的类图

Set类图

从类图我们也能够看出来,Set的具体实现也从是否支持并发、是否支持排序进行了分化。

具体实现

由于Set中许多类都是基于Map的,在下面列出部分直接的对应关系,就不做具体介绍了。

SetMap备注
HashSetHashMap非线程安全
LinkedHashSetLinkedHashMap非线程安全
ConcurrentSkipListSetConcurrentSkipListMap线程安全
TreeSetTreeMap非线程安全

以上,就是两者之间的对应关系,实际上这些Set中都包含了对应Map作为成员变量,而Set中的元素,就对应Map中的key。

而唯一的一个例外,就是CopyOnWriteArraySet。这是基于CopyOnWriteArrayList实现的集合。

首先,看一下其成员变量

public class CopyOnWriteArraySet<E> extends AbstractSet<E>
        implements java.io.Serializable {
    private static final long serialVersionUID = 5457747651344034263L;

    //CopyOnWriteArrayList作为成员变量
    private final CopyOnWriteArrayList<E> al;
}

其次,就是add方法

    public boolean add(E e) {
        //这里的添加,copyOnWriteArrayList会首先复制生成一个SNAPSHOT,然后在SNAPSHOT中进行添加,最后将旧的指针指向SNAPSHOT
        return al.addIfAbsent(e);
    }

可以看到,其实都是直接调用了CopyOnWriteArrayList中的方法直接进行实现的,其它方法也都是一样。

小结

当我们了解了ListMap的结构后,再来看Set的实现就会轻松很多,因为Set实际上是基于List或是Map实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值