1. 程式人生 > >java List 、Set 、Map集合聯絡與區別

java List 、Set 、Map集合聯絡與區別

List Map Set 集合

一、基礎概念

1. Collection 和 Map 介面

​ Java集合框架主要由 CollectionMap兩個根介面及其子介面、實現類組成。

1) Collection 介面是Set、List、和Queue介面的父介面:

Collection: Set 、List 、Queue 1. Set集合包括: HashSet ( LinkedHashSet)、SortedSet (TreeSet)、EnumSet 2. List集合包括: ArrayList 、 LinkedList 、 Vector 3. Queue集合: (併發程式設計中涉及,一般用於緩衝,併發訪問) 其中 ArrayList 、LinkedList 、HashSet 、 TreeSet 為常用實現類。

2) Map 介面實現類儲存具有對映關係的資料。每項資料由鍵值對(key ,value)組成,其中key不可重複:

Map 主要實現類:HashMap (LinkedHashMap)、SortedMap(TreeMap) 、HashTable(Properties)、 EnumMap等

其中 HashMap 、TreeMap 為常用實現類。

 

二、List 集合

​ List集合儲存物件為 重複且有序

1. ArrayList :陣列集合型別;可動態增加容量

​ 特點:元素增刪慢,查詢快

2. LinkedList :連結串列集合型別;雙向迴圈列表,可用作為堆疊

​ 特點:方便增刪

3.常用方法:

​ 具體方法檢視 ArrayList APILinkedList API

​ add(Object e):新增元素,按照插入的順序排列

​ add(int index, Object e):向指定索引處新增元素,原有元素依次後移

​ remove(Object e):刪除指定元素,返回值為被刪除的元素

​ remove(int index):刪除指定索引處元素,返回值為被刪除的元素

​ set(int index, Object e):將索引處的元素替換成指定元素,返回值為替換前的元素

​ get(int index):獲取指定索引處的元素,並返回該元素

 

三、Set集合

​ Set集合儲存物件為 唯一且無序 。(插入順序與遍歷循序不一致)

1. HashSet :元素不重複且無序集合,有且僅有一個元素為null

2. TreeSet:元素不重複但有序(樹結構)集合 ,元素不能為null;

3. 常用方法:

​ 具體方法檢視 HashSet API TreeSet API

boolean add(E e) 將指定的元素新增到此組如果尚未存在。
void clear() 刪除所有從這個集合的元素。
Object clone() 返回一個淺拷貝的HashSet例項:元素本身不是克隆。
boolean contains(Object o) 如果這個集合包含指定的元素返回true。
boolean isEmpty() 如果這組不包含任何元素返回true。
Iterator<E> iterator() 返回一個迭代器在這個集合的元素。
boolean remove(Object o) 從這組刪除指定的元素是否存在。
int size() 返回元素的數量在這集(基數)。

四、 Map集合

​ Map集合介面 表示一個鍵值對(key,value)的對映。其中:

​ 1.KeySet:為一個Map中 鍵(key)的集合,以Set的形式儲存,所以不能重複。通過Map.KeySer()方法獲取。遍歷方法:

Set set = map.KeySet();
for(Object key : set){
    System.out.println(map.get(key));
}
​ 2.Values: 為一個Map中 值(value)的集合,以Collection的形式儲存,所以可重複。通過Map.Values()方法獲取。遍歷方法:
Collection values = map.Values();
Iterator it = values.iterator();
while(it.hasNext()){
    System.out.printLn(it.next());
}

​ 3.Entry:為Map介面中的靜態內部介面,表示某個鍵值對的對映。通過Map.entrySet()方法獲取一組Entry集合,並儲存在Set中;

遍歷方法:

Set entrySet = map.entrySet();
 for (Object entrys : entrySet) {
     Map.Entry entry = (Map.Entry) entrys; //獲取到一組Entry
    System.out.println(entry);      //key=value
     System.out.println(entry.getKey() + " / " + entry.getValue());
 }
  1. HashMap: 速度快,無序 ; 執行緒不安全,key-value 允許為空

  2. TreeMap: 有序 ,效率比hashMap低

  3. LinkedHashMap: (HashMap子類)結合HashMap和TreeMap的優點:有序效率高

應用場景:

​ 快速查詢考慮 HashMap ;

​ 需特定排序考慮 TreeMap ;

​ 僅需要插入順序考慮LinkedhashMap ;

HashMap API ;