標籤:under ble png image 分段 尋找 而不是 lis 集合
最頂端是兩個介面,集合和映射—— Collection<T> / Map<K, V>
List 列表 保持插入順序
ArrayList 擅長隨機讀
LinkedList 增、刪
Arrays$ArrayList 定長List,功能有限
Set 集
HashSet 尋找最快
TreeSet 升序排序
LinkedHashSet 保持插入順序
Queue 隊列
LinkedList 也實現了Queue介面,
PriorityQueue 保持插入順序
Map 映射
HashMap 散列映射,速度最快
LinkedHashMap 保持插入順序
WeakHashMap 鍵不再使用時,值回報GC
TreeMap 升序排序
根據詞綴總結一下
List和帶“Linked”的實現都能保持插入順序。
帶"Hash"的實現速度都比較快,特別是讀。
帶“Tree”的實現都能在插入是進行排序。
以下的實現幾乎沒有理由再去使用
Vector 最舊的List實現。幾乎每個對外方法都是synchronized的,內部數組每次擴容時增長一倍,而不是像ArrayList一樣增長50%。
Hashtable 最舊的Map實現。幾乎每個對外方法都是synchronized的,使用Enumeration進行迭代,contains效能太差。
Stack 廢棄API,LinkedList完全可以取代它。
選擇哪個實現?
List 預設選擇ArrayList,需要大規模的增刪時,選擇LinkedList,需要安全執行緒時,選擇Collections.synchronizedList()。
Set 預設選擇HashSet,對排序、保持插入順序有需求時,按需選擇,需要安全執行緒時,選擇Collections.synchronizedSet()或Collections.synchronizedSortSet(),
Queue 預設選擇LinkedList,對保持插入順序有需求時,選擇PriorityQueue。
Map 預設選擇HashMap,對排序、保持插入順序有需求時,按需選擇,需要安全執行緒時,選擇Collections.synchronizedMap()或Collections.synchronizedSortMap(),
線程相關的三種版本
synchronizedMap為整個散列表加鎖;ConcurrentHashMap採用分段鎖,將散列表分割成16個散列桶,每個線程只鎖一個桶。
Java Collecttion Framework 備忘點