java中集合分类有两大根
接口Collection
和Map
Collection集合的架构粗略分类 List Queue 和Set
1.首先Collection
集合是迭代接口Iterable的子接口,整个Collection都是在可迭代遍历范围的类型,Iterable接口中返回基础迭代器Iterator和分割迭代器Spliterator为提供基础迭代遍历方式
对于不同的具体实现类有不同的底层数据结构,具体的迭代方式又根据自身变化可能有变化或者扩展 有增强迭代器皿如List的增强双向遍历迭代ListIterator
另外对于分割迭代器Spliterator
而言,它适合将大数据集合分割成小集合处理,其底层原理式并行流
,而结合流的处理方式是现有常见的代码编写,流(Stream)和Collection集合的结合应用
2.对于Collection
集合和其通用默认功能实现的AbstractCollection
定义了整个Collection架构的基础功能架构(详情介绍链接),Collections
作为Collection集合框架的工具类为其提供常用方法实现
抽象类架构每种数据结构都有其抽象类,专门针对自身的集合类型定位提供核心抽象方法或默认通用实现类型
其中Vector
和Stack
已经过时不用了, Vector被ArrayList替代
, Stack被ArrayDeque
在List架构中,AbstractList为其提供核心抽象方法和默认通用实现功能,而其子抽象类AbstractSequentialList 则在此基础上扩展了专门为链表结构处理的功能
具体的子类上ArrayList是基于动态数组, 集合框架中最灵活的数据结构之一LinkedList如果作为list使用,其迭代功能基础简化实现是在AbstractSequentialList中提供
的
此外就是专门为List框架设计的线程安全的类CopyOnWriteArrayList,核心是只在写操作时加锁
,适合读多写少
场景
set框架结构最大的特性就是 元素不可重复
,另外部分类是无序,但也有排序存在 如TreeMap
和 LinkedHashSet
有序性
:
LinkedHashSet 双向链表+(哈希桶+链表+红黑树) 元素可以按照插入顺序输出 底层是LinkedHashMap
TreeSet 红黑树结构 元素可以按照大小输出,底层是TreeMap
无序性
:
HashSet 哈希桶+链表+红黑树 ,无序,底层是HashMap
线程安全的
CopyOnWriteArraySet 底层是CopyOnWriteArrayList
,也是写操作加锁,适用 读多写少
场景
整体Queue架构划分在基本队列Queue
上 衍生出双端队列Deque
以及 基本队列的线程安全的 阻塞基本队列接口BlockingQueue
,而双端队列接口又衍生出线程安全的阻塞双端队列接口BlockingDeque
基本队列Queue架构详情介绍
架构图
首先整个Queue 架构是在Queue接口基本队列
基础上的(单向链表
) 其主要实现类有最灵活的的数据结构LinkedList,和 基于二次堆(最小堆)的PriorityQueue
还有非阻塞线程安全的ConcurrentLinkedQueue
双端队列Deque架构详情介绍
架构图
常见实现类有ArrayDeque和 LinkedList,子接口BlockingDeque以及阻塞双端队列实现类LinkedBlockingDeque详情介绍,还有ConcurrentLinkedDeque
阻塞基本队列BlockingQueue架构详情介绍
架构图
Map整体结构
ConcurrentMap
接口下的类是为Map框架提供线程安全的类,核心思想是分段哈希桶锁 和 基于跳表两个思路详情点击介绍链接,至于HashTable 这个已经过时舍弃不怎么用了,而SortedMap是为Map框架提供排序功能的,其具体实现类是TreeMap
现在就具体看抽象类下面实现的具体的Map实现类
集合框架 Map接口和抽象类AbstractMap详情介绍链接
HashMap:基于哈希桶+链表+红黑树的数据结构
TreeMap:基于红黑树
LinkedHashMap :基于HashMap的数据结构 + 双向链表结构