集合相關的類有一大堆,通常也只用到經常使用的方法增刪改查,並且它它們的方法名也基本同樣,因此一直都不知道何時用什麼集合,android
今天趁有空特地從網上整理資料方便往後回憶。數組
1、List:、有順序以線性方式存儲,能夠存放重複對象安全
線程安全方法:List list = Collections.synchronizedList(new LinkedList(...));數據結構
LinkedList:雙向鏈表實現存儲 索引數據慢插入數度較快 線程不安全(比安全性能好)性能
ArrayList:數組方式存儲數據 索引數據快插入數據慢 線程不安全spa
Vector:數組方式存儲數據 索引數據快插入數據慢 線程安全.net
Stack:繼承自Vector,實現一個後進先出的堆棧線程
2、Set:無順序,不包含重複的元素設計
HashSet:爲快速查找設計的Set。存入HashSet的對象必須定義hashCode()。 對象
TreeSet: 保存次序的Set, 底層爲樹結構。使用它能夠從Set中提取有序的序列。
LinkedHashSet:具備HashSet的查詢速度,且內部使用鏈表維護元素的順序(插入的次序)。因而在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
3、Map:鍵必須是惟一
同步方法:Map m = Collections.synchronizedMap(new TreeMap(...));
Hashtable:基於散列表的實現 容許空鍵空值 線程安全
HashMap:基於散列表的實現 容許空鍵空值 線程不安全 (與Hashtable基本一致)
TreeMap: 基於紅黑樹數據結構的實現 不容許空鍵空值 線程不安全
WeakHashMap:改進的HashMap,它對key實行「弱引用」,若是一個key再也不被外部所引用,那麼該key能夠被GC回收。
在除須要排序時使用TreeSet,TreeMap外,都應使用HashSet,HashMap,由於他們的效率更高。
4、SparseArray<E>:採用了二分法方式存儲數據(安卓的一個集合類)
android系統建議咱們用SparseArray<E>來代替HashMap<Integer, E>
SparseArray的使用基本與List同樣,在些不詳細解說,你們能夠看http://blog.csdn.net/xyz_fly/article/details/793194