1. List 接口实现
- ArrayList
动态数组:基于可调整大小的数组实现,支持快速随机访问,扩容时通常增长50%。 - LinkedList
双向链表:通过节点(Node)的prev和next指针连接元素,支持高效插入/删除,但随机访问较慢。 - Vector
同步动态数组:类似ArrayList,但所有方法用synchronized修饰(线程安全),已逐渐被CopyOnWriteArrayList或Collections.synchronizedList取代。
2. Set 接口实现
-
HashSet
哈希表:内部基于HashMap实现,元素作为键,值统一为虚拟对象(如PRESENT)。 -
LinkedHashSet
链表+哈希表:继承HashSet,内部通过LinkedHashMap维护插入顺序或访问顺序。 -
TreeSet
红黑树:基于TreeMap实现,元素按自然顺序或自定义比较器排序。 -
EnumSet
位向量(Bit Vector) :专为枚举类型优化,底层用位掩码存储,高效且内存紧凑。
3. Map 接口实现
- HashMap 数组+链表+红黑树
- LinkedHashMap 链表+HashMap (插入节点时会用额外的链表记录插入顺序)
- TreeMap 红黑树
- Hashtable
数组+链表:早期线程安全的哈希表,通过synchronized方法实现同步,已被ConcurrentHashMap取代。 - IdentityHashMap
线性探测哈希表:使用==而非equals()比较键,适合需要对象地址相等性的场景。 - WeakHashMap
弱引用键哈希表:键为弱引用,当键不再被强引用时,条目会被自动回收,常用于缓存。 - EnumMap
枚举专用数组:以枚举常量为键,内部用数组按枚举顺序存储值,紧凑高效。
4. Queue/Deque 接口实现
- PriorityQueue 最小堆
- ArrayDeque
循环数组:用数组实现双端队列,支持高效的头尾操作(如addFirst、pollLast)。 - ConcurrentLinkedQueue
无锁链表:基于CAS操作的线程安全队列,适用于高并发场景。 - PriorityBlockingQueue
堆+锁:线程安全的优先级队列,内部使用数组实现最小堆,通过锁保证并发安全。
5. 并发数据结构
-
ConcurrentHashMap
分段锁/CAS:JDK8前采用分段锁,之后改用CAS+synchronized优化并发性能。 -
CopyOnWriteArrayList
写时复制数组:修改操作(如add)时复制整个数组,保证读操作无锁,适合读多写少场景。 -
BlockingQueue 实现类
- ArrayBlockingQueue:数组+锁,固定大小的阻塞队列。
- LinkedBlockingQueue:链表+锁,可选有界或无界。
- PriorityBlockingQueue:堆+锁,支持优先级的阻塞队列。
6. 特殊用途类
- Stack
数组:继承自Vector,用数组实现栈结构(方法为synchronized),但官方推荐用Deque替代。 - BitSet
位数组:动态长度的位向量,用于高效处理位级操作(如标志位存储)。