java中常用集合的简单介绍

文章详细介绍了Java集合框架中的List、Set和Map接口的常见实现,包括ArrayList、LinkedList、HashSet、TreeSet、HashMap和TreeMap,以及线程安全的ConcurrentHashMap和CopyOnWriteArrayList。这些数据结构各有优缺点,适合不同的应用场景,如ArrayList适合随机访问,LinkedList适合频繁插入删除,HashSet和TreeSet分别提供无序和有序的元素集合,而HashMap和TreeMap则用于键值对的存储。对于多线程环境,ConcurrentHashMap和CopyOnWriteArrayList提供了优化的并发性能。
摘要由CSDN通过智能技术生成

List(列表)

特点:List 是一个有序集合,允许重复元素。可以通过索引访问元素。

常见实现:

ArrayList

:基于动态数组实现,支持快速随机访问。插入和删除元素的时间复杂度为 O(n),访问元素的时间复杂度为 O(1)。
优点:访问速度快。
缺点:插入和删除元素的性能较差,尤其是在列表的中间或开头。

LinkedList:基于双向链表实现。插入和删除元素的时间复杂度为 O(1),访问元素的时间复杂度为 O(n)。
优点:插入和删除元素的性能较好。
缺点:访问速度慢,因为需要顺序访问链表。

Set(集合)

特点:Set 是一个无序集合,不允许重复元素。

常见实现:

HashSet:基于哈希表实现。添加、删除和查找元素的时间复杂度平均为 O(1)。
优点:操作速度快。
缺点:不保证元素顺序,且内存开销可能较大。

TreeSet:基于红黑树实现。添加、删除和查找元素的时间复杂度为 O(log n)。
优点:元素有序,且操作速度相对较快。
缺点:操作速度不如 HashSet,内存开销可能较大。

Map(映射)

特点:Map 是一个键值对集合,通过键来访问和操作值。

常见实现:

HashMap:基于哈希表实现。添加、删除和查找键值对的时间复杂度平均为 O(1)。
优点:操作速度快。
缺点:不保证键值对顺序,且内存开销可能较大。

TreeMap:基于红黑树实现。添加、删除和查找键值对的时间复杂度为 O(log n)。
优点:键值对有序,且操作速度相对较快。
缺点:操作速度不如 HashMap,内存开销可能较大。

线程安全的ConcurrentHashMap 和 CopyOnWriteArrayList:
ConcurrentHashMap

ConcurrentHashMap 是一个线程安全的哈希映射表。相比于通过 Collections.synchronizedMap(new HashMap<>()) 创建的线程安全映射,ConcurrentHashMap 在多线程环境下提供了更好的性能,因为它采用了分段锁技术。这意味着不同的线程可以在不同的段上同时进行读写操作,从而降低锁竞争,提高并发性能。

ConcurrentHashMap 提供了很多线程安全的方法,如 putIfAbsent、remove 和 replace 等,这些方法可以原子性地完成对映射表的更新,避免多线程操作导致的不一致。

CopyOnWriteArrayList

CopyOnWriteArrayList 是一个线程安全的动态数组实现。它的核心思想是“写时复制”(Copy-on-Write),即每当需要对列表进行修改时(如添加、删除元素),它会创建一个新的底层数组,并将原有数据复制到新数组中,然后再进行修改。这样,在进行读操作时,就不需要加锁,因为读操作总是在原始数组上进行,不受修改的影响。

CopyOnWriteArrayList 适用于读操作远多于写操作的场景,因为在这种场景下,它可以提供较高的并发性能。然而,如果写操作较频繁,CopyOnWriteArrayList 的性能可能会受到影响,因为频繁的数组复制会产生较大的开销。

总结一下,ConcurrentHashMap 和 CopyOnWriteArrayList 是针对多线程环境下的优化实现。ConcurrentHashMap 使用分段锁技术,提高了映射表的并发性能;而 CopyOnWriteArrayList 则采用写时复制策略,适用于读操作远多于写操作的场景。在选择合适的集合类时,需要根据实际场景和需求来权衡。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值