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
按照索引值升序保存对象,线程安全支持多并发