Java的基础集合详解
2024-03-17 本文已影响0人
小白牙_2fc6
在Java 1.8版本的集合框架中,下表更新了集合的接口、对应的主要实现以及底层实现的数据结构,还包括了初始容量、扩容机制以及相应的并发集合版本:
集合接口 | 主要实现 | 底层数据结构 | 特点 | 适用场景 | 初始容量 | 扩容机制 | 并发集合 |
---|---|---|---|---|---|---|---|
List | ArrayList | 动态数组 | 保持插入顺序,索引访问元素 | 频繁按照索引访问元素/增删操作 | 10 | 增长到原来的1.5倍 | CopyOnWriteArrayList |
LinkedList | 双向链表 | 双向链表实现 | 插入删除操作更经济 | 不适用 | 不适用,因为是链表实现 | (没有直接的线程安全LinkedList替代) | |
Set | HashSet | 哈希表 | 快速查找,无序 | 快速查找不重复元素 | 16 | 当元素数量>容量*负载因子时扩容,通常为当前容量的2倍 | CopyOnWriteArraySet / ConcurrentSkipListSet |
LinkedHashSet | 哈希表+链表 | 保持插入顺序,快速访问 | 保留元素插入顺序的快速查找 | 16 | 当元素数量>容量*负载因子时扩容,通常为当前容量的2倍 | (没有直接替代,可用ConcurrentHashMap实现) | |
TreeSet | 红黑树 | 排序集合,基于红黑树 | 元素排序要求 | 不适用 | 不适用,因为是红黑树的实现 | ConcurrentSkipListSet | |
Map | HashMap | 哈希表 | 根据键值对存储,快速访问 | 快速键值对存取 | 16 | 当元素数量>容量*负载因子时扩容,通常为当前容量的2倍 | ConcurrentHashMap |
LinkedHashMap | 哈希表+链表 | 保持插入顺序,访问快 | 保留插入顺序键值对的快速存取 | 16 | 当元素数量>容量*负载因子时扩容,通常为当前容量的2倍 | (没有直接替代,可用ConcurrentHashMap实现) | |
TreeMap | 红黑树 | 根据键排序的映射集合,基于红黑树 | 需要对键排序 | 不适用 | 不适用,因为是红黑树的实现 | ConcurrentSkipListMap |
每个集合接口下的主要实现是围绕它们的底层数据结构而构建的,这些数据结构直接影响到了集合的操作性能和使用场景。例如,ArrayList是建立在动态数组基础之上的,而LinkedList是建立在双向链表基础之上的,这两种数据结构定义了List接口在不同场景下的应用。HashSet、LinkedHashSet和TreeSet则分别基于哈希表、哈希表加链表以及红黑树实现,它们分别提供了不同的Set实现。Map接口下的HashMap、LinkedHashMap和TreeMap也基于这些数据结构实现相应功能。而相应的并发集合则是对这些数据结构进行线程安全优化后的版本。