使用java集合的 “缺點”
集合不能使用基本數據類型,只能使用對象句柄
在將對象置入一個集合時丟失了類型信息,集合實際容納的是類型爲Object 的一些對象的句柄,但不包含基本數據類型,不存在類型信息,使用之前要進行類型塑造。
集合框架
集合比較
個人總結
如何選擇集合:
是否鍵值對:
是:Map
鍵是否排序:
是:TreeMap,類似TreeSet
否:HashMap(不知道就使用HashMap),線程不安全,類似hashset。linkedHashMap(有序)繼承於它。
Hashtable:線程安全,但是鎖定整個表
ConcurrentHashMap:線程安全,使用桶鎖
否:Collection
元素唯一:
是:set
元素排序:
是:TreeSet
否:HashSet(不知道用HashSet)
線程安全的結構:
CopyOnWriteArraySet
否:List
安全:
是:Vector(其實不用)
否:ArrayList或者LinkedList
增刪多:LinkedList。適合增加刪除以及修改的操作,線程不安全,效率高
查詢多:ArrayList(不知道就用)。適合隨機的查找,增刪慢,線程不安全,效率高
兩種線程安全的arrayList:
CopyOnWriteArrayList類 (內部是使用lock進行加鎖解鎖完成單線程訪問)
Collections.synchronizedList內部類(使用synchronize關鍵字,插入比上面的快,數據量10萬)