? ?1.Collection接口是最基本的接口? 一個(gè)Collection代表一組Object,Collection派生的兩個(gè)接口Set和List
? 2.List是有序的Collection,能夠精確的控制每個(gè)元素的插入位置。使用下標(biāo)訪問每個(gè)元素,List允許有相同的元素
? 3.LinkedList實(shí)現(xiàn)了List接口,允許null元素,LinkedList可用作堆棧(stack),隊(duì)列(queue),或雙向隊(duì)列(deque),LinkedList沒有同步方法,多線程同時(shí)訪問List,必須實(shí)現(xiàn)訪問同步,一個(gè)解決辦法是:
? List list = Collections.synchronizedList(new LinkedList());
? 4.ArrayList實(shí)現(xiàn)了可變大小的數(shù)組,允許所有元素,包括null,一個(gè)ArrayList實(shí)例有一個(gè)容量(Capacity),非同步的
? 5.Vector和ArrayList很像,區(qū)別Vector是線程同步的
? 6.Stack繼承自Vector,實(shí)現(xiàn)一個(gè)先進(jìn)后出的堆棧。Stack剛創(chuàng)建的時(shí)候是空的
? 7.Set接口是不包含重復(fù)元素的Collection,最多允許有個(gè)null元素
? 8.Map沒有繼承Collection接口,是一組key-value映射
? 9.HashTable繼承Map接口,實(shí)現(xiàn)一個(gè)key-value映射的hash表,任何非空的對(duì)象都可作為key或value,線程同步
? 作為key的對(duì)象通過計(jì)算散列函數(shù)來確定與其對(duì)應(yīng)的value的位置,任何作為key的對(duì)象都必須實(shí)現(xiàn)hashCode()和equals()方法,注意兩個(gè)不同對(duì)象的hashcode可能相同
? 10.HashMap和HashTable類似,但HashMap是非同步的,并且允許為null
? 11.WeakHashMap是一種改進(jìn)的HashMap,對(duì)key實(shí)行“弱引用”,如果一個(gè)key不再被外部引用,該key可以被GC回收。
? 注:
? ? 如果涉及到堆棧,隊(duì)列等操作,要考慮使用List,需要快速的插入和刪除元素的使用LinkedList,需要快速隨機(jī)訪問,使用ArrayList
? ? 對(duì)hash表的操作,作為key的對(duì)象要正確重寫equals和hashCode方法
? ? 盡量返回接口而非實(shí)際的類型