1. 程式人生 > >3.list、map、set的區別!

3.list、map、set的區別!

5. List 的三個子類的特點(2017-2-23)
   ArrayList 底層結構是陣列,底層查詢快,增刪慢。
   LinkedList 底層結構是連結串列型的,增刪快,查詢慢。
   voctor 底層結構是陣列 執行緒安全的,增刪慢,查詢慢。

6. List 和Map、Set 的區別(2017-11-22-wzz)

   6.1 結構特點

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

   6.2 實現類

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

    Map 介面有三個實現類(HashMap:基於hash 表的Map 介面實現,非執行緒安全,高效,支援null 值和null

鍵;HashTable:執行緒安全,低效,不支援null 值和null 鍵;LinkedHashMap:是HashMap 的一個子類,儲存了

記錄的插入順序;SortMap 介面:TreeMap,能夠把它儲存的記錄根據鍵排序,預設是鍵值的升序排序)。

    Set 介面有兩個實現類(HashSet:底層是由HashMap 實現,不允許集合中有重複的值,使用該方式時需要重

寫equals()和hashCode()方法;LinkedHashSet:繼承與HashSet,同時又基於LinkedHashMap 來進行實現,底

層使用的是LinkedHashMp)。

    6.3 區別

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

    7. HashMap 和HashTable 有什麼區別?(2017-2-23)
   HashMap 是執行緒不安全的,HashMap 是一個介面,是Map 的一個子介面,是將鍵對映到值得物件,不允許鍵值重複,允許空鍵和空值;由於非執行緒安全,HashMap 的效率要較HashTable 的效率高一些.
   HashTable 是執行緒安全的一個集合,不允許null 值作為一個key 值或者Value 值;
   HashTable 是sychronize,多個執行緒訪問時不需要自己為它的方法實現同步,而HashMap 在被多個執行緒訪問的時候需要自己為它的方法實現同步;