1. 程式人生 > >list、set、map集合的詳細區別

list、set、map集合的詳細區別

一、list、set

https://images0.cnblogs.com/i/532548/201404/262238192165666.jpg

list、set的父類是collection,collection的父類是Iterator

List:有序可重複集合

①、List list1 = new ArrayList();

    底層資料結構是陣列,查詢快,增刪慢;執行緒不安全,效率高

   ②、List list2 = new Vector();

    底層資料結構是陣列,查詢快,增刪慢;執行緒安全,效率低,幾乎已經淘汰了這個集合

   ③、List list3 = new LinkedList();

    底層資料結構是連結串列,查詢慢,增刪快;執行緒不安全,效率高

Set:檢視HashSet的原始碼,HashSet集合就是HashMap的key組成

  • HashSet:不能保證元素的順序;不可重複;不是執行緒安全的;集合元素可以為 NULL;其底層是一個數組,加快查詢效率,index = hash(value);

對於 HashSet: 如果兩個物件通過 equals() 方法返回 true,這兩個物件的 hashCode 值也應該相同;如果 hashCode 值相同,那麼會繼續判斷該元素和集合物件的 equals() 作比較

hashCode 相同,equals 為 true,則視為同一個物件,不儲存在 hashSet()中

hashCode 相同,equals 為 false,則儲存在之前物件同槽位的連結串列上。

  • Set linkedHashSet = new LinkedHashSet(); 不可重複有序集合,不是執行緒安全的

因為底層採用 連結串列 和 雜湊表的演算法。連結串列保證元素的新增順序,雜湊表保證元素的唯一性

  • Set treeSet = new TreeSet();不可重複有序集合,不是執行緒安全的

底層使用紅黑樹演算法,擅長於範圍查詢

如果使用 TreeSet() 無引數的構造器建立一個 TreeSet 物件, 則要求放入其中的元素的類必須實現 Comparable 介面所以, 在其中不能放入 null 元素;必須放入同樣類的物件.(預設會進行排序) 否則可能會發生型別轉換異常.我們可以使用泛型來進行限制

​​​​​​​二、map

map兩個集合之間 的對映關係,key-value鍵值對的形式,Map沒有實現Collection介面

1、通過 map.values() 方法得到 Map 中的 value 集合

Collection<Object> value = hashMap.values();

2、通過 map.keySet() 得到 Map 的key 的集合,然後 通過 get(key) 得到 Value

Set<String> set = hashMap.keySet();

3、通過 Map.entrySet() 得到 Map 的 Entry集合,然後遍歷

    Set<Map.Entry<String, Object>> entrys = hashMap.entrySet();

    for(Map.Entry<String, Object> entry: entrys){

        String key = entry.getKey();

        Object value2 = entry.getValue();

        System.out.println(key+"="+value2);

    }

Map實現類

說明

HashMap

採用Hash表演算法,Map中的key不保證新增的先後順序,key也不允許重複,判斷key重複的條件是equals為true並且HashCode值相等

LinkedHashMap

採用連結串列和Hash演算法,Map中的key會按照自然順序進行排序,key不允許重複,key的重複的判斷標準和HashMap

TreeMap

採用紅黑樹演算法,Map中的key會按照自然順序或定製排序進行排序,key不允許重複,判斷key重複的條件是compareTo或者compare的返回值是否為0

Hashtable

採用Hash演算法,是HashMap的前身(類似於Vector是ArrayList的前身),是繼承Dictionary類然後再實現Map,執行緒安全的,效能比較低,已經棄用

Propertise

HashTable的子類,要求key和value都是String型別,用來載入資原始檔(propertise檔案)