1. 程式人生 > 其它 >list、set、map的區別和聯絡

list、set、map的區別和聯絡

List、Map、Set的區別與聯絡

一、結構特點

  1. `List`和`Set`是儲存單列資料的集合,`Map`是儲存鍵值對這樣的雙列資料的集合;
  2. `List`中儲存的資料是有順序的,並且值允許重複;`Set`中儲存的資料是無順序的,並且不允許重複,但元素在集合中的位置是由元素的`hashcode`決定,即位置是固定的(`Set`集合是根據`hashcode`來進行資料儲存的,所以位置是固定的,但是這個位置不是使用者可以控制的,所以對於使用者來說set中的元素還是無序的,如果要存放類物件需要重寫equals和hashcode方法),`Map`中儲存的資料是無序的,它的鍵是不允許重複的,但是值是允許重複的;。

二、實現類

  1. List介面有三個實現類:

1.1 `LinkedList`

基於連結串列實現,連結串列記憶體是雜湊的,增刪快,查詢慢;

1.2 `ArrayList`
基於陣列實現,非執行緒安全,效率高,增刪慢,查詢快;
1.3 `Vector`
基於陣列實現,執行緒安全,效率低,增刪慢,查詢慢;

2.Set介面有兩個實現類:

2.1 HashSet
底層是由 Hash Map 實現,不允許集合中有重複的值,使用該方式時需要重寫 equals()和 hash Code()方法;
2.2 LinkedHashSet
繼承於 HashSet,同時又基於 LinkedHashMap 來進行實現,底層使用的是 LinkedHashMap



3.Map介面有四個實現類:

2.1 HashMap

基於 hash 表的 Map 介面實現,非執行緒安全,高效,支援 null 值和 null鍵
2.2 HashTable
執行緒安全,低效,不支援 null 值和 null 鍵;
2.3 LinkedHashMap
是 HashMap 的一個子類,儲存了記錄的插入順序;