Java集合框架解析
Java集合概图:
List
List类表示有序可重复集合,特点是有序。
ArrayList:
ArrayList是基于数组实现的,默认大小是10,在填满后,默认会扩容到原来的1.5倍左右(JDK8之后默认是两倍)。
LinkedList:
基于双向链表实现,暴露的方法与ArrayList非常类似。
Set
唯一性集合,特点是唯一。
HashSet:
利用哈希表实现的Set,内部无序。
TreeSet:
利用红黑树实现的Set,利用红黑树实现自排序。
Queue
即队列,可以分为单端和双端两种。
Queue 是单端队列,只能从一端插入元素,另一端删除元素,实现上一般遵循 先进先出(FIFO) 规则。Deque 是双端队列,在队列的两端均可以插入或删除元素。事实上,Deque 还提供有 push() 和 pop() 等其他方法,可用于模拟栈。
ArrayDeque 和 LinkedList 都实现了 Deque 接口。PriorityQueue 是在 JDK1.5 中被引入的, 其与 Queue 的区别在于元素出队顺序是与优先级相关的,即总是优先级最高的元素先出队。
Map
HashMap 默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。
JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树),以减少搜索时间。
相比于HashMap来说, TreeMap 主要多了对集合中的元素根据键排序的能力以及对集合内元素的搜索的能力。
HashMap 的长度为什么是 2 的幂次方?取余(%)操作中如果除数是 2 的幂次则等价于与其除数减一的与(&)操作。
ConcurrentHashMap相关:
首先,这是线程安全的。