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也基于这些数据结构实现相应功能。而相应的并发集合则是对这些数据结构进行线程安全优化后的版本。

上一篇下一篇

猜你喜欢

热点阅读