Java中List、Set、Map的區別

  • 結構特點

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

  • 實現類

List 接口有三個實現類(ArrayList:基於數組實現,非線程安全的,效率高,便於索引,但不便於插入刪除;LinkedList:基於鏈表實現,鏈表內存是散亂的,每一個元素存儲本身內存地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢;Vector:基於數組實現,線程安全的,效率低)。

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

Map 接口有三個實現類(HashMap:基於 hash 表的 Map 接口實現,非線程安全,高效,支持 null 值和 null鍵;HashTable:線程安全,低效,不支持 null 值和 null 鍵;LinkedHashMap:是 HashMap 的一個子類,保存了記錄的插入順序;SortMap 接口:TreeMap,能夠把它保存的記錄根據鍵排序,默認是鍵值的升序排序)。

  • 區別

List 集合中對象按照索引位置排序,可以有重複對象,允許按照對象在集合中的索引位置檢索對象,例如通過list.get(i)方法來獲取集合中的元素;

Set 集合中的對象不按照特定的方式排序,並且沒有重複對象,但它的實現類能對集合中的對象按照特定的方式排序,例如 TreeSet 類,可以按照默認順序,也可以通過實現 Java.util.Comparator<Type>接口來自定義排序方式;

Map 中的每一個元素包含一個鍵和一個值,成對出現,鍵對象不可以重複,值對象可以重複。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章