List Set Map之間的不同

weixin_34138377發表於2018-03-31

它們都繼承自Collection類。

10點不同:

序號 屬性 java.util.List java.util.Set java.util.Map
1 重複元素 List允許儲存重複元素。 Set不允許儲存重複元素。 Map以鍵值對形式儲存資料,key不允許重複,value可以重複。
2 插入順序 List以插入順序儲存元素。 大部分Set實現類不維護插入順序。
HashSet不維護插入順序。
LinkedHashSet維護插入順序。
TreeSet自然順序排序。
大部分Map實現類不維護插入順序。
HashMap不維護插入順序。
LinkedHashMap維護key的插入順序。
TreeMap以key的自然順序排序。
3 null keys List允許儲存多個null值。 大部分Set實現類允許儲存一個null值。
TreeSetConcurrentSkipListSet 不允許儲存null值。
Map實現類:
HashMap允許一個null鍵多個null值
LinkedHashMap允許一個null鍵多個null值
TreeMap不允許null鍵允許多個null值
Hashtable不允許null鍵和null值
ConcurrentHashMap不允許null鍵和null值
ConcurrentSkipListMap不允許null鍵和null值
4 獲取指定索引的元素 List實現類提供了get方法獲取指定索引的元素。get方法直接通過指定索引獲取元素,因此時間複雜度為O(1)。 Set實現類不提供此類方法。 Map實現類不提供此類方法。
5 子類 ArrayList
LinkedList
Vector
CopyOnWriteArrayList
HashSet
CopyOnWriteArraySet
LinkedHashSet
TreeSet
ConcurrentSkipListSet
EnumSet
HashMap
Hashtable
ConcurrentHashMap
LinkedHashMap
TreeMap
ConcurrentSkipListMap
IdentityHashMap
WeakHashMap
EnumMap
6 listIterator listIterator方法遍歷元素並返回ListIterator物件。
listIterator相對iterator方法提供了額外的方法:hasPrevious(), previous(), nextIndex(), previousIndex(), add(E element), set(E element)。
Set沒有提供類似listIterator的方法,只是簡單返回Iterator。 Map提供了三種iterator:
map.keySet().iterator()
遍歷key並返回Iterator物件。
map.values().iterator()
遍歷value並返回Iterator物件。
map.entrySet().iterator()
遍歷key和value並返回Map.Entry物件。
7 結構和調整大小 List是可調整大小的陣列。 Set使用Map實現。因此Set的結構和調整大小與Map相同。 Map使用雜湊技術儲存鍵值對。
8 基於結構/隨機訪問的索引 ArrayList使用基於索引的陣列實現,因此提供了隨機訪問。LinkedList不是基於索引的結構。 Set不是基於索引的結構。 Map不是基於索引的結構。
9 非同步的子類 ArrayList
LinkedList
HashSet
LinkedHashSet
TreeSet
EnumSet
HashMap
LinkedHashMap
TreeMap
IdentityHashMap
WeakHashMap
EnumMap
10 同步的子類 Vector
CopyOnWriteArrayList
CopyOnWriteArraySet
ConcurrentSkipListSet
Hashtable
ConcurrentHashMap
ConcurrentSkipListMap

http://www.javamadesoeasy.com/2016/02/difference-between-list-set-and-map-in.html

相關文章