1. 程式人生 > >Java集合--雙列集合Map

Java集合--雙列集合Map

Map集合

       前面我們提到過的Collection集合以及他的子實現類,這些集合屬於單列集合,而在實際開發中,經常使用到的還有雙列集合Map集合。

      在具體講雙列集合之前,再來回憶一下單列集合。在單列集合中,首先分為List和Set兩個集合,而List集合又分為ArrayList,Vector,和LinkdList子實現類,Set分為HashSet、LinkedHashSet和TreeSet。而List和Set的區別在於,List集合是有序的,而且元素可以重複,Set集合是無序的,元素唯一。

     雙列集合顧名思義就是儲存了兩個值,而這兩個值通常被稱為鍵值對。例如:一個人的名字對應他的年齡,這就是一個鍵值對。Map同Collection一樣也是作為雙列集合的根集合,下面有三個子類,HashMap、LinkedHashMap和TreeMap。同單列集合一樣,HashMap是無序的,要是是自定義物件需要重寫hashCode和equals方法保證他的唯一性;LinkedHashMap是有序的,這裡的有序指的是元素存入和取出的順序一致;而TreeMap不僅是有序的,因為其底層的紅黑樹結構,它可以根據鍵值的大小進行排序。而集合的這些特點都是和其底層結構有關。

HashMap底層資料結構是雜湊表,所以其特點是元素無序且唯一(自定義物件需要重寫hashCode和equals方法保證他的唯一性)

LinkedHashMap底層資料結構是連結串列和雜湊表,而連結串列保證了元的有序性

TreeMap底層資料結構是紅黑樹,可以對元素進行排序

可以看出,單列集合的Set集合的特性以及子實現類和Map集合具有很多共同點,而在前面我們也提到過Set集合最後是依賴於Map集合實現的,所以,在對單列集合有所瞭解之後,再理解Map集合應該不會很難。

先給出一個Map集合物件的構造:

 Map<String, Student> hm = new HashMap<String, Student>();

因為Map集合也是一個介面,所以利用抽象類多型實現物件的建立,其中的String泛型指的就是鍵,Student泛型指的就是值,通常統稱為一個鍵值對。

需要注意的是:Map集合的資料結構之和鍵有關,和值無關。

在建立物件之後,就可以利用Map中的成員方法來實現對物件的操作,這裡就先提到一個方法,put(key,value)方法,這和單列集合中的add方法功能一樣,就是給集合新增元素的。例如:hm.put("s001", new Student("張三", 23));

這裡來講一下Map集合的遍歷,先給出一個單列集合的遍歷方式:for(Student s : hs){
System.out.println(s.getName()+"---"+s.getAge());
}

這是一個單列集合遍歷的例子,hs是一個單列集合物件,而對於雙列集合的遍歷,由兩種方式

1)Set<String> keySet = hm.keySet();
for (String key : keySet) {
System.out.println(key + "====" + hm.get(key).getName() + "--" + hm.get(key).getAge());
}

首先得到一個鍵的Set集合,然後結合get方法獲取鍵對應的值完成遍歷

2)Set<Entry<String, Student>> entrySet = hm.entrySet();
for (Entry<String, Student> en : entrySet) {


String key = en.getKey();
Student stu = en.getValue();
System.out.println(key + "==" + stu.getName() + "--" + stu.getAge());
}

首先得到一個鍵值對物件的Set集合,然後通過entrySet中的getKey()和getValue()完成遍歷。

注意,在遍歷之前首先獲得一個Set集合,然後再進行遍歷。

最後給出Map集合中常用的成員方法:

size獲取集合的長度;isEmpty判斷集合是否為空;containsKey(key)判斷集合是否有此鍵;containsValue(value)判斷集合是否有這個值;remove(key)根據鍵移除一對鍵值對。