在集合框架中,有两个顶层的接口:
Collection和Map
Collection表示一组纯数据,Map表示一组key-value对。
单线程集合
一、Collection
Collection主要有List、Set、Queue三个接口
1、List
List按照插入的顺序排序,元素可以重复,继承Collection接口,实现类主要有ArrayList、Vector、LinkedList
(1)ArrayList
线程不安全,效率高速度快---查询速度快
使用变长数组算法实现的
在中间插入或删除一个元素意味着这个列表的其余元素都会移动,开销比较大
(2)LinkedList
采用双向循环链表实现
在中间插入或删除一个元素是固定的,效率比较高---增删速度快
还添加了可以使用栈、队列或双端队列的方法。能够直接实现栈(Stack)的所有方法
(3)Vector(过时)
线程安全,效率较低
使用变长数组算法实现的队列
ArrayList与Vector都是变长数组实现的
2、Set
Set元素不重复,主要实现类有HashSet、LinkedHashSet、TreeSet
(1)HashSet
存储方式:是只有一个key的HashMap实现的,散列函数
查询速度比较快
(2)LinkedHashSet
存储方式:基于LinkedHashMap实现
存储方式:散列函数
以插入顺序保存元素
(3)TreeSet
存储方式:基于TreeMap、实现方式是红-黑树数据结构
元素是排序状态
3、Queue
PriorityQueue:基于优先级的队列
二、Map
key-value的集合,key是唯一的,不重复,主要实现类有HashMap、HashTable、TreeMap、LinkedHashMap
(1)HashMap
非线程安全,不检查锁,快
不能保证随着时间推移,Map的元素顺序不变
(2)HashTable(过时)
线程安全,检查锁,比较慢
(3)TreeMap
按元素的key排序。已排好序的红-黑树实现
(4)LinkedHashMap
继承HashMap,以插入顺序保存元素
HashMap与HashTable区别
都实现了Map接口
HashMap是非synchronized的,线程不安全,key和value都可以是null,迭代器(Iterator)是fail-fast迭代器。
HashTable是synchronized的(慢),线程安全key和value都不能是null,迭代器(enumerator)不是fail-fast迭代器
注意:新程序中不应该使用过时的Vector、HashTable、Stack
并发集合
1、Lists
CopyOnWriteArrayList
list的实现每一次更新都会产生一个新的隐含数组副本,所以这个操作成本很高
2、Queues
LinkedBlockingDeque
3、Maps
ConcurrentHashMap
HashMap、HashTable、ConcurrentHashMap
ConcurrentSkipListMap
4、Sets
ConcurrentSkipListSet
CopyOnWriteArraySet
整理比较好的文章:http://blog.csdn.net/u013256816/article/details/50925091#comments