List、Set與Map
文章目錄
1)List
2)Set
3)Map
概述
- 在寫程序時不知道究竟需要多少對象,需要在控件不足時自動擴增容量,則需要使用容器類庫
- Collection、List、Set、Map都是接口,不能實例化,繼承自它們的 ArrayList, Vector, HashTable, HashMap是具象class,這些纔可被實例化。
- List和Set都繼承至Collection接口,Map爲獨立接口
List
- 包括ArrayList,Vector,LinkedList
- 有序,可重複;List可以動態增長,查找元素效率高,插入刪除元素效率低,因爲會引起其他元素位置改變。
- ArrayList
- 底層是數組,查詢快,增刪慢,線程不安全,效率高
- Veator
- 底層是數組,查詢快,增刪慢,線程安全,效率低
- LinkedList
- 底層是鏈表,查詢慢,增刪快,線程不安全,效率高
- 知道是List,但是不知道是哪個List,就用ArrayList。
Set
- 包括HashSet、LinkedHashSet、TreeSet
- 無序,唯一,無法用下標來取得想要的值;檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。
- HashSet
- 底層是哈希表,無序唯一,依賴hashCode()和equals()來保證元素唯一性
- LinkedHashSet
- 底層是鏈表和哈希表,有序唯一,由鏈表保證有序,由哈希表保證唯一
- TreeSet
- 底層是紅黑樹,有序唯一,自然排序和比較器排序保證元素排序,根據比較的返回值是否爲0來保證元素的唯一性
- 知道是Set,但是不知道是哪個Set,就用HashSet。
Map
- 包括HashMap、LinkedHashMap、TreeMap、HashTable
- 適合存儲鍵值對的數據
- HashMap
- 底層是哈希表,非線程安全
- 無序的,方法不是同步的,不是線程安全,效率較高,允許null值。
- HashTable
- 無序的,方法是同步,線程安全,效率較低,不允許有null值。
- TreeMap
- 底層是紅黑樹,非線程安全
- 有序的,主要用於排序,可以自定義排序規則
- LinkedHashSet
- 主要保證有序的集合
- java中String數組和List的互相轉化
參考
java中Map,List與Set的區別
java 常用集合list與Set、Map區別及適用場景總結
Java集合中List,Set以及Map等集合體系詳解