1、線程安全 線程安全就是說多線程訪問同一代碼,不會產生不確定的結果。 2、List類和Set類List類和Set類是Collection集合介面的子介面。Set子介面:無序,不允許重覆。List子介面:有序,可以有重覆元素。 Set和List對比: Set:檢索元素效率低下,刪除和插入效率高,插入 ...
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場景。