Set之ConcurrentSkipListSet、EnumSet

本文介绍了Java中的ConcurrentSkipListSet,一种线程安全的有序集合,基于跳表数据结构,适用于高并发场景,支持动态扩展和无锁并发操作。同时对比了与EnumSet的区别,后者非线程安全,专为枚举类型设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ConcurrentSkipListSet

ConcurrentSkipListSet是java中的集合类,是在多线程的环境中使用的,实现Set接口,它基于跳表(skip List)的数据结构。跳表是一种基于并行排序的数据结构,允许快速的出入,删除和查找操作,且在多线程环境中具备良好的并发性能。

主要用途和特点:

  • 线程安全: ConcurrentSkipListSet 是线程安全的,可以在多线程环境中安全的使用呢,无需额外的同步措施。但需要注意的是,他是复合操作,并不保证原子性,故而在特定的应用场景下,可能需要外部同步,从而保证一系列操作的原子性。
  • 有序性: 集合中的元素是有序的,它们按照自然顺序或者通过提供的比较器进行排序。但是在使用比较器的时候,实际上的比较器的接口主要实现了compable接口,为了确保比较器的逻辑和元素的compareTo方法一直,从而避免不一致的排序。
  • 动态扩展:跳表具备动态扩展的特性,可以有效的对应元素的动态添加和删除。

在这里插入图片描述
在这里插入图片描述

常用方法介绍

  • add(E e):

    • 将指定元素添加到集合中,如果集合已包含该元素,则不进行修改。
    • 返回 true 如果元素成功添加,false 如果元素已经存在。
      ConcurrentSkipListSet<String> set = new ConcurrentSkipListSet<>();
      set.add("Apple");
      set.add("Banana");
      
  • addAll(Collection<? extends E> c):

    • 将指定集合中的所有元素添加到集合中。
    • 返回 true 如果集合发生改变,false 如果集合未发生改变。
    Set<String> fruits = new HashSet<>(Arrays.asList("Orange", "Grape"));
    set.addAll(fruits);
    
  • remove(Object o):

    • 从集合中移除指定元素。
    • 返回 true 如果元素存在并成功移除,false 如果元素不存在。
    set.remove("Banana");
    
  • contains(Object o):

    • 判断集合是否包含指定元素。
    • 返回 true 如果元素存在,false 如果元素不存在。
    boolean containsApple = set.contains("Apple");
    
  • size():

    • 返回集合中的元素数量。
    int setSize = set.size();
    
  • isEmpty():

    • 判断集合是否为空。
    • 返回 true 如果集合为空,false 如果集合不为空。
    boolean isEmpty = set.isEmpty();
    
  • iterator():

  • 返回集合的迭代器,可以用于遍历集合中的元素。

    Iterator<String> iterator = set.iterator()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miaow.Y.Hu

赏一口饭吃吧,大大们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值