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