1. 程式人生 > >List、Set和Map的區別

List、Set和Map的區別

一、結構特點

  1. List和Set是儲存單列資料的集合,Map是儲存鍵和值這樣的雙列資料的集合;
  2. List中儲存的資料是有順序,並且允許重複; Map中儲存的資料是無序的,其鍵是不能重複的,但是值是可以重複的;Set中儲存的資料是無序的,且不允許有重複,但元素在集合中的位置由元素的hashCode決定,位置是固定的(Set 根據hashcode來進行資料的儲存,所以位置是固定的,但是位置不是使用者可以控制的,所以對於使用者來說 set 中的元素還是無序的);

二、實現類

        List介面有三個實現類 

  1.  LinkedList:基於連結串列實現,連結串列記憶體是散亂的,每一個元素儲存本身記憶體地址的同時還儲存下一個元素的地址。                                      連結串列增刪快,查詢慢;
  2. ArrayList:基於陣列實現,非執行緒安全的,效率高,便於索引,但不便於插入刪除;
  3. Vector:基於陣列實現,執行緒安全的,效率低

       Map介面有三個實現類

  1. HashMap:基於 hash 表的 Map 介面實現,非執行緒安全,高效,支援 null 值和 null鍵;
  2. HashTable:執行緒安全,低效,不支援 null 值和 null 鍵; LinkedHashMap:                                                                                                    是 HashMap 的一個子類,儲存了記錄的插入順序;
  3. SortMap 介面: TreeMap,能夠把它儲存的記錄根據鍵排序,預設是鍵值的升序排序;

      Set介面有兩個實現類

  1. HashSet:底層是由 HashMap 實現,不允許集合中有重複的值,使用該方式時需要重寫 equals()和 hashCode()方法;
  2. LinkedHashSet:繼承與 HashSet,同時又基於 LinkedHashMap 來進行實現,底層使用的是 LinkedHashMap;
     

三、區別

  1. List 集合中物件按照索引位置排序,可以有重複物件,允許按照物件在集合中的索引位置檢索物件,例如通過list.get(i)方法來獲取集合中的元素;
  2. Map 中的每一個元素包含一個鍵和一個值,成對出現,鍵物件不可以重複,值物件可以重複;
  3. Set 集合中的物件不按照特定的方式排序,並且沒有重複物件,但它的實現類能對集合中的物件按照特定的方式排序,例如 TreeSet 類,可以按照預設順序,也可以通過實現 Java.util.Comparator<Type>介面來自定義排序方式