它們都繼承自Collection類。
10點(diǎn)不同:
| 序號(hào) | 屬性 | java.util.List | java.util.Set | java.util.Map |
|---|---|---|---|---|
| 1 | 重復(fù)元素 | List允許存儲(chǔ)重復(fù)元素。 | Set不允許存儲(chǔ)重復(fù)元素。 | Map以鍵值對(duì)形式存儲(chǔ)數(shù)據(jù),key不允許重復(fù),value可以重復(fù)。 |
| 2 | 插入順序 | List以插入順序存儲(chǔ)元素。 |
大部分Set實(shí)現(xiàn)類不維護(hù)插入順序。 HashSet不維護(hù)插入順序。 LinkedHashSet維護(hù)插入順序。 TreeSet以自然順序排序。 |
大部分Map實(shí)現(xiàn)類不維護(hù)插入順序。 HashMap不維護(hù)插入順序。 LinkedHashMap維護(hù)key的插入順序。 TreeMap以key的自然順序排序。 |
| 3 | null keys | List允許存儲(chǔ)多個(gè)null值。 |
大部分Set實(shí)現(xiàn)類允許存儲(chǔ)一個(gè)null值。 TreeSet和ConcurrentSkipListSet 不允許存儲(chǔ)null值。 |
Map實(shí)現(xiàn)類: HashMap允許一個(gè)null鍵和多個(gè)null值。 LinkedHashMap允許一個(gè)null鍵和多個(gè)null值。 TreeMap不允許null鍵,允許多個(gè)null值。 Hashtable不允許null鍵和null值。 ConcurrentHashMap不允許null鍵和null值。 ConcurrentSkipListMap不允許null鍵和null值。 |
| 4 | 獲取指定索引的元素 | List實(shí)現(xiàn)類提供了get方法獲取指定索引的元素。get方法直接通過指定索引獲取元素,因此時(shí)間復(fù)雜度為O(1)。 | Set實(shí)現(xiàn)類不提供此類方法。 | Map實(shí)現(xiàn)類不提供此類方法。 |
| 5 | 子類 | ArrayList LinkedList Vector CopyOnWriteArrayList |
HashSet CopyOnWriteArraySet LinkedHashSet TreeSet ConcurrentSkipListSet EnumSet |
HashMap Hashtable ConcurrentHashMap LinkedHashMap TreeMap ConcurrentSkipListMap IdentityHashMap WeakHashMap EnumMap |
| 6 | listIterator | listIterator方法遍歷元素并返回ListIterator對(duì)象。 listIterator相對(duì)iterator方法提供了額外的方法:hasPrevious(), previous(), nextIndex(), previousIndex(), add(E element), set(E element)。 |
Set沒有提供類似listIterator的方法,只是簡(jiǎn)單返回Iterator。 | Map提供了三種iterator: map.keySet().iterator() 遍歷key并返回Iterator對(duì)象。 map.values().iterator() 遍歷value并返回Iterator對(duì)象。 map.entrySet().iterator() 遍歷key和value并返回Map.Entry對(duì)象。 |
| 7 | 結(jié)構(gòu)和調(diào)整大小 | List是可調(diào)整大小的數(shù)組。 | Set使用Map實(shí)現(xiàn)。因此Set的結(jié)構(gòu)和調(diào)整大小與Map相同。 | Map使用哈希技術(shù)存儲(chǔ)鍵值對(duì)。 |
| 8 | 基于結(jié)構(gòu)/隨機(jī)訪問的索引 | ArrayList使用基于索引的數(shù)組實(shí)現(xiàn),因此提供了隨機(jī)訪問。LinkedList不是基于索引的結(jié)構(gòu)。 | Set不是基于索引的結(jié)構(gòu)。 | Map不是基于索引的結(jié)構(gòu)。 |
| 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