1、安全執行緒
安全執行緒就是說多線程訪問同一代碼,不會產生不確定的結果。
2、List類和Set類
List類和Set類是Collection集合介面的子介面。
Set子介面:無序,不允許重複。
List子介面:有序,可以有重複元素。
Set和List對比:
Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
List:和數組類似,List可以動態增長,尋找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。
Set和List具體子類:
Set
|————HashSet:以雜湊表的形式存放元素,插入刪除速度很快。
List
|————ArrayList:動態數組
|————LinkedList:鏈表、隊列、堆棧。
Array和java.util.Vector
Vector是一種老的動態數組,是線程同步的,效率很低,一般不贊成使用。
3、HashMap和HashTable
a.HashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法。
b.HashTable同步的,而HashMap是非同步的,效率上比HashTable要高。
c.HashMap允許空索引值,而HashTable不允許。
4、安全執行緒集合類與非安全執行緒集合類
LinkedList、ArrayList、HashSet是非安全執行緒的,Vector是安全執行緒的;
HashMap是非安全執行緒的,HashTable是安全執行緒的;
StringBuilder是非安全執行緒的,StringBuffer是安全執行緒的。
5、集合適用情境
對於尋找和刪除較為頻繁,且元素數量較多的應用,Set或Map是更好的選擇;
ArrayList適用於通過為位置來讀取元素的情境;
LinkedList 適用於要頭尾操作或插入指定位置的情境;
Vector 適用於要安全執行緒的ArrayList的情境;
Stack 適用於安全執行緒的LIFO情境;
HashSet 適用於對排序沒有要求的非重複元素的存放;
TreeSet 適用於要排序的非重複元素的存放;
HashMap 適用於大部分key-value的存取情境;
TreeMap 適用於需排序存放的key-value情境。