JAVA集合分析概述
- - ITeye博客 前段时间在QQ空间写了篇关于JAVA集合分析的日志,现搬到这里与大家分享. 其中有链接可查看各种集合的具体介绍. 最基本的数据结构有数组、链表2种. 1)数组的长度是固定的,容量是有限的(除非扩容). 可以用索引访问,因此访问速度比较快. 2)链表中每个节点指向下一个节点,容量是无限的(不作限制且不考虑硬件).
前段时间在QQ空间写了篇关于JAVA集合分析的日志,现搬到这里与大家分享。 其中有链接可查看各种集合的具体介绍。
http://user.qzone.qq.com/396768440/blog/1359132442
最基本的数据结构有数组、链表2种。
1)数组的长度是固定的,容量是有限的(除非扩容)。可以用索引访问,因此访问速度比较快。
2)链表中每个节点指向下一个节点,容量是无限的(不作限制且不考虑硬件)。访问链表中的任一节点需要遍历链,因此访问速度比较慢。
JAVA集合内部使用这2种结构中的1种或2种来保存数据,基本接口有:Map和Collection。Collection下有List、Queue、Set这3个接口。
名称
|
数据结构
|
线程安全
|
key有序
|
key可空
|
明细
|
|
HashMap
|
数组+链表(hash表)
|
否
|
否
|
是
|
||
LinkedHashMap
|
数组+链表
|
否
|
否
|
是
|
||
TreeMap
|
链(红黑树)
|
否
|
是
|
否
|
||
ConcurrentHashMap
|
数组+数组+链表(分段hash表)
|
是
|
ReentrantLock
|
否
|
否
|
|
ConcurrentSkipListMap
|
链表+索引链(跳表)
|
是
|
CAS
|
是
|
否
|
|
Hashtable
|
数组+链表
|
是
|
synchronized
|
否
|
否
|
|
EnumMap
|
数组+数组
|
否
|
否
|
否
|
||
WeakHashMap
|
数组+链表
|
否
|
否
|
是
|
||
IdentityHashMap
|
数组+链表
|
否
|
否
|
是
|
名称
|
数据结构
|
线程安全
|
可阻塞
|
容量有限
|
元素可空
|
明细
|
||
ArrayList
|
数组
|
否
|
否
|
否
|
是
|
|||
LinkedList
|
链表(双向)
|
否
|
否
|
否
|
是
|
|||
Vector
|
数组
|
是
|
synchronized
|
否
|
否
|
是
|
|
|
Stack
|
数组 |
是
|
synchronized
|
否
|
否
|
是
|
||
ConcurrentLinkedQueue
|
链表
|
是
|
CAS
|
否
|
否
|
否
|
||
PriorityQueue
|
数组
|
否
|
否
|
否
|
否
|
|||
PriorityBlockingQueue
|
数组
|
是
|
ReentrantLock
|
是
|
Condition
|
否
|
否
|
|
ArrayBlockingQueue
|
数组
|
是
|
ReentrantLock
|
是
|
Condition
|
是
|
否
|
|
LinkedBlockingQueue
|
链表
|
是
|
ReentrantLock
|
是
|
Condition
|
是
|
否
|
|
ArrayDeque
|
数组(双向)
|
否
|
否
|
否
|
否
|
|||
LinkedBlockingDeque
|
链表(双向)
|
是
|
ReentrantLock
|
是
|
Condition
|
是
|
否
|
|
SynchronousQueue
|
-
|
是
|
CAS
|
是
|
LockSupport
|
是
|
否
|
|
DelayQueue
|
数组
|
是
|
ReentrantLock
|
是
|
Condition
|
否
|
否
|