1. 程式人生 > >Java集合概述Set、List、Map

Java集合概述Set、List、Map

Java的集合類是由兩個介面類派生而出:Collection、Map

1、Collection介面派生出來的Set集合是無序集合,派生出的List集合是有序集合、佇列Queue

-Set集合中的元素無序不允許重複
-List集合類似陣列,元素有序同時長度可變,且元素允許重複

2、Set集合:
(1)Set集合不能記住元素的新增順序,不允許包含重複元素,如果新增重複元素,會新增失敗,返回false,且不會新增進入;
(2)HashSet類:集合元素值可以為null;如果多個執行緒訪問一個HashSet,需要通過程式碼保證其同步(非執行緒安全的)
注:如果把一個物件放入到HashSet中,重寫了equals方法,則需要重寫HashCode方法(即兩個方法要保持同步)
(3)LinkedHashSet類:HashSet的子類,根據hashCode方法計算位置,同時使用連結串列維護元素次序,內部元素是有序的(新增順序)
注:Set集合實現類HashSet、TreeSet、EnumSet都是執行緒不安全的,可以通過Collections工具類的synchronizedSortSet進行包裝該Set集合,保證多個執行緒訪問一個Set集合時的執行緒安全;Set集合遍歷可以使用iterator迭代器進行迭代;
3、List集合:
(1)List集合代表元素有序,可重複的集合,預設按照新增順序設定元素的索引
(2)List集合遍歷除了可以使用iterator迭代器外,還提供ListIterator迭代器進行遍歷
(3)ArrayList和Vector實現類:基於陣列實現的List類,他們均封裝了一個動態的、允許動態再分配的Object[]陣列(如果初始長度不指定,則為10);另外ArrayList是執行緒不安全的,Vector是執行緒安全的;(遍歷建議get方法)
(4)LinkedList類:List介面的實現類,遍歷建議採用Iterator迭代器;

2、Map集合是有順序的,是key-value對應的,key不可以重複,但value可以重複:
(1)Map轉為set使用entrySet方法
(2)HasnTable是一個執行緒安全的Map實現,但不允許使用null為key或者value的鍵值對;HashMap是執行緒不安全的,同時可以使用null作為key或者value;
(3)HashTable和HashMap不能保證key和value鍵值對的順序;(相等判斷僅僅比較value相同即可)
(4)LinkedHashMap使用雙向連結串列來維護;
注:Map遍歷:
map集合不能直接遍歷,需要轉變為Set集合利用Iterator迭代器進行遍歷;
keySet()以及entrySet方法結合while或者for-each遍歷