【Java-集合】说说常见的集合有哪些?
以下是 Java 中最常用的集合分类及核心实现类,按使用频率排序并标注最新版本特性(截至 Java 17):
📦 核心集合分类详解
1️⃣ List 线性表(有序+可重复)
实现类数据结构特点适用场景ArrayList动态数组随机访问快(O(1)),增删慢(需移位)90%+ 的 List 场景首选LinkedList双向链表增删快(O(1)),随机访问慢(O(n))低频随机访问的队列CopyOnWriteArrayList写时复制数组读无锁写加锁,弱一致性读多写少的并发场景
✅ List 选型口诀:无脑选 ArrayList,需高频头尾操作才用 LinkedList。
2️⃣ Set 唯一集(元素不重复)
实现类底层依赖特点使用场景HashSetHashMap哈希表实现,最快查询(O(1))通用去重场景LinkedHashSetLinkedHashMap保留插入顺序需记录顺序的去重TreeSetTreeMap红黑树排序(自然序或自定义 Comparator)需要有序的去重
💡 关键点:
HashSet 允许 1个 null,TreeSet 不允许 null(因需排序)
3️⃣ Map 键值对(Key 唯一)
实现类数据结构特点使用场景HashMap数组+链表/红黑树最高效的键值存储(哈希冲突时转树)99% 的键值存储场景LinkedHashMap链表+哈希表保留插入顺序 或 LRU访问顺序需记录顺序的缓存ConcurrentHashMap分段锁/ CAS高并发安全,性能远优于 Hashtable高并发缓存/计数器TreeMap红黑树Key 自然排序需排序的键值对
⚠️ 注意:
HashMap 允许 1个 null Key,HashTable 已淘汰(用 ConcurrentHashMap 替代)
4️⃣ Queue 队列
实现类特点典型场景ArrayDeque双端循环数组,高效入队出队替代 Stack(更快线程不安全)PriorityQueue堆实现优先级队列任务调度(如定时任务)LinkedBlockingQueue链表阻塞队列,容量可选线程池任务队列
🚀 现代 Java 新增集合(JDK 9+)
不可变集合工厂方法(线程安全+内存高效)
List
Set
Map
Records 简化数据载体(JDK 16+)
record Point(int x, int y) {} // 自动生成 equals/hashCode
💎 终极选型指南
📌 黄金法则:
List 选 ArrayListSet 选 HashSetMap 选 HashMap