Java集合
文章平均质量分 92
介绍常用的Java集合类的实现原理、应用场景等
长风几厘米
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java集合详解:LinkedBlockingQueue
LinkedBlockingQueue 是 Java 中一种线程安全的有界阻塞队列,采用 FIFO(先进先出)原则。它通过双锁机制(入队锁和出队锁)实现高效并发操作,避免生产者与消费者之间的锁竞争。队列满时,生产者线程挂起等待;队列空时,消费者线程挂起等待。LinkedBlockingQueue 改进了传统双锁队列的两个主要问题:频繁唤醒导致的性能损失和 Java 平台下的 GC 问题。通过按需唤醒机制,减少不必要的线程唤醒,并通过打断出队节点的引用链,帮助 GC 回收内存。其核心实现包括入队(put)和出原创 2025-05-15 15:50:56 · 1028 阅读 · 0 评论 -
Java集合详解:ConcurrentLinkedQueue
ConcurrentLinkedQueue 是 Java 中一种基于无锁算法实现的并发 FIFO 队列,采用改进的 M&S 队列算法,优化了 CAS 冲突和 GC 问题。其核心特点包括: 无锁设计:通过 CAS 操作实现并发安全,减少锁竞争。 滞后指针优化:允许 head 和 tail 指针滞后,减少 CAS 操作频率,降低冲突。 GC 优化:在更新 head 指针时,断开已出队节点的引用链,避免内存泄漏和跨代链接问题。 弱一致性:迭代操作基于队列快照,size() 方法时间复杂度为 O(n),且在原创 2025-05-15 15:45:46 · 1139 阅读 · 0 评论 -
Java集合详解:ConcurrentSkipListMap
ConcurrentSkipListMap 是 Java 并发包中的一种高并发、有序映射表实现,基于跳表(SkipList)数据结构。它通过键的大小进行排序,支持多线程环境下的安全操作,如插入、删除、更新和读取,平均时间复杂度为 O(log n)。ConcurrentSkipListMap 的遍历操作是弱一致性的,迭代器返回的是键值对的不可变快照。size() 方法在并发环境下不精确,批量操作如 putAll 也不保证原子性。此外,ConcurrentSkipListMap 不允许使用空键或空值。跳表通过多原创 2025-05-15 15:41:43 · 992 阅读 · 0 评论 -
Java集合详解:ConcurrentHashMap
ConcurrentHashMap 是 Java 中一种高效的并发哈希映射表,支持高并发的检索和更新操作。其核心设计包括高效的哈希函数、链地址法处理哈希冲突、动态扩容机制以及多种并发控制机制。哈希函数通过扰动函数减少冲突,并使用位运算快速计算哈希地址。冲突处理采用链表和红黑树结合的方式,当链表长度超过阈值时转换为红黑树以提高查找效率。动态扩容机制通过并发操作维持装填因子,确保查询性能。在并发控制方面,ConcurrentHashMap 针对不同数据结构(数组、链表、红黑树)采用了不同的同步策略,如 CAS、原创 2025-05-15 15:32:51 · 844 阅读 · 0 评论 -
Java集合详解:TreeMap
java.util.TreeMap 是基于红黑树实现的有序映射表,支持高效的插入、删除和查找操作,时间复杂度为 O(log n)。TreeMap 通过红黑树维护键值对的有序性,要求键必须是可比较的,可以通过实现 Comparable 接口或提供自定义比较器来实现。TreeMap 的核心成员变量包括 root(红黑树的根节点)、size(节点数量)和 modCount(结构修改次数)。TreeMap 通过中序遍历红黑树实现有序迭代,successor 方法用于查找给定节点的后继节点,确保迭代顺序的正确性。Tr原创 2025-05-15 15:19:03 · 1220 阅读 · 0 评论 -
Java集合详解:CopyOnWriteArrayList
java.util.concurrent.CopyOnWriteArrayList 是一种采用写时复制技术(COW)实现的线程安全顺序表,适用于并发环境中。其核心思想是在写入时复制原数组的副本,并在副本上进行修改,最后将引用指向新副本,从而保证读操作的高效性和线程安全性。通过读写分离技术,CopyOnWriteArrayList 允许多个线程同时进行读操作,而写操作则通过互斥锁保证线程安全。这种设计在遍历操作远多于写入操作的场景中表现尤为高效。CopyOnWriteArrayList 的迭代器基于快照,因此原创 2025-05-15 15:17:00 · 1160 阅读 · 0 评论 -
Java集合详解:WeakHashMap
是一种使用弱项(WeakEntry)的哈希映射表,本质上是一种特殊的HashMap,其关于哈希表部分的实现与HashMap没有什么不同,而弱项就是使用弱引用实例作为Map的表项(表元素)。原创 2025-05-15 15:11:01 · 984 阅读 · 0 评论 -
Java集合详解:LinkedHashMap
就是带链表的HashMap;每一种数据结构都有其优势,同时也有其劣势,这使得不同的数据结构适用于不同的应用场景,但在实际应用中,有很多复杂和动态的应用场景通常需要采用不同的数据结构来处理,这个时候就需要组合不同的数据结构来满足特定应用场景的需求,就是一种组合数据结构的实现,它组合了链表和哈希表,不仅仅具有哈希表快速的随机存取能力,同时又保持了元素的插入或者访问顺序,可以通过链表对元素按照其插入或访问顺序进行快速的遍历。组合了双向链表和哈希表,关于哈希表和HashMap可看这篇。原创 2025-05-15 15:08:00 · 1055 阅读 · 0 评论 -
Java集合详解:HashMap
HashMap 是一种基于哈希表实现的键值对存储结构,通过哈希函数将键映射到数组下标,实现高效查找。哈希表的核心思想是通过特征值与存储位置建立直接关系,减少查找时的比较次数。实现哈希表需考虑哈希函数构造、冲突处理和装填因子调整。HashMap 使用扰动函数处理 hashCode,采用链地址法解决冲突,并在链表过长时转换为红黑树以提高效率。默认装填因子为0.75,动态扩容机制保证查找效率与空间利用率。使用 HashMap 时需注意 hashCode 的均匀分布,避免频繁扩容。HashSet 基于 HashMa原创 2025-05-15 15:03:39 · 805 阅读 · 0 评论 -
Java集合详解:ArrayList & LinkedList
ArrayList 和 LinkedList 是 Java 中 List 接口的两个常用实现。ArrayList 基于动态数组,支持快速随机访问,但插入和删除操作可能涉及数组元素的移动,时间复杂度为 O(n)。其扩容机制通过增加原数组容量的一半来实现,频繁扩容可能影响性能。LinkedList 基于双向链表,插入和删除操作在头部和尾部的时间复杂度为 O(1),但随机访问需要遍历链表,时间复杂度为 O(n)。两者均非线程安全,在多线程环境下可能引发 ConcurrentModificationExceptio原创 2025-05-15 14:58:57 · 856 阅读 · 0 评论
分享