Java中容器类之Collection和Map浅谈

Java中容器类之Collection和Map浅谈

一、Collection

一个独立元素的队列,这些元素都服从一条或多条规则。List必须按照插入顺序保存元素;Set不允许有重复元素;Queue按照队列规则来确定对象产生顺序,只能从一端插入对象,并从另一端移除对象。

1、List

ArrayList和LinkedList都是List类型,他们都是按照插入的顺序保存元素,两者的不同是执行某些操作的性能。ArrayList内部实现可变数组,查找元素快,插入删除元素慢。LinkedList内部实现链表,插入删除元素快,查找元素慢。

Stack(栈)是后进先出的容器,LinkedList可以实现栈的所有功能,因此可以使用LinkedList作为Stack使用。

2、Set

HashSet、TreeSet、LinkedHashSet都是Set类型。HashSe使用了散列函数,查找元素快,元素存储顺序随机;TreeSet使用红黑树的数据结构,按照比较结果的升序保存对象;LinkedHashSet因为查询速度也是用了散列,但是它也是用了链表来维护元素的插入顺序,按照被添加的顺序保存对象。

3、Queue

队列是先进先出的容器,在并发编程中特别重要。LinkedList实现了Queue接口,并且提供了支持队列的行为,可以作为Queue的一种实现。

Vector、HashTable、Stack已过时,不建议使用。

二、Map

一组成对的“键值对"对象,它将对象(而非数字)与对象相关联,可以通过键来查值。

1、HashMap(取代HashTable)

基于散列表的实现,设计快速访问

2、TreeMap

基于红黑树的实现,保持“键”处于排序状态,所以没有HashMap快

3、LinkedHashMap

类似于HashMap,通过链表保持元素插入顺序,但也通过散列提供了快速访问能力。

4、WeakHashMap

弱键(Weak key)映射,允许释放映射所指向的对象,如果映射之外没有引用指向某个键,则此"键“可能会被垃圾回收器回收。

5、ConCurrentHashMap

一种线程安全的Map,不涉及同步加锁。

6、ConcurrentSkipListMap

按照索引值升序保存对象,线程安全支持多并发