Java集合類之Map

  這兩天看了一下關於Map及子類的東西,做一下小結。

 Map

 Map集合裏存儲的是具有映射關係的鍵值對,什麼是映射關係,就跟數學當中的函數映射差不多,一個x值對應一個y值。Map中也一樣,裏面的“鍵”就相當於x值,“值”相當於y值。鍵值是不能重複的,每個鍵最多映射一個值。Map接口提供三種Collection接口,允許以鍵集合——KetSet,值集合——Values和鍵值對集合EntrySet來產看映射的內容。映射的順序爲迭代器在Collection視圖中返回的順序,有些映射是有順序的如TreeMap,有些沒有如HashMap。(Map中是沒有直接的迭代器,實質是獲得鍵集合或鍵-值的Set集合以及值集合的Collection,然後用這些集合的迭代器進行迭代,我是這樣理解的,不知道對不對).Map中有一些常規的方法,如put,get,clear等,通過代碼進行說明。

public class MapDemo {

	public static void main(String[] args) {
		
		Map<Integer,String> map = new HashMap<Integer,String>();
		map.put(8,"zhaoliu");  //添加元素
		map.put(2,"zhaoliu");
		map.put(7,"xiaoqiang");
		map.put(6,"wangcai");
		
		<span style="font-family:FangSong_GB2312;">//得到map中“值”的集合</span>
		Collection<String> values = map.values();
		<span style="font-family:FangSong_GB2312;">//調用迭代器</span>
		Iterator<String> it2 = values.iterator();
		while(it2.hasNext()){
			System.out.println(it2.next());
		}
	}
}
	
		Map<Integer,String> map = new HashMap<Integer,String>();
		map.put(8,"zhaoliu");
		map.put(2,"zhaoliu");
		map.put(7,"xiaoqiang");
		map.put(6,"wangcai");
		
		//獲得map中鍵的集合,然後得到它的迭代器,遍歷,再通過鍵值獲得
                <span style="font-family:FangSong_GB2312;">//</span>元素值
		Set<Integer> keySet = map.keySet();
		Iterator<Integer> it = keySet.iterator();
		
		while(it.hasNext()){
			Integer key = it.next();
			String value = map.get(key);
			System.out.println(key+":"+value);
			
		}
//獲得map中鍵-值的集合,其中Map.Entry<Ingeter,String> 是映射關係的類型,Entrt是Map中的內部接口
		Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
		Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();
		
		while(it.hasNext()){
			Map.Entry<Integer, String> me = it.next();
			Integer key = me.getKey();
			String value = me.getValue();
			System.out.println(key+"::::"+value);
			
		}

HashMap

基於hash表的Map接口的實現,可以允許null值和null鍵,此類不能保證映射的順序。HashMap是不同步的,線程不安全的,因次當多個線程訪問此線程,其中至少一個線程從結構上修改了該映射,則必須保持外部同步。什麼結構上修改?就是指增加或刪除一個或多個映射關係的操作,而那些修改了已經存在的映射關係的值的操作則不是結構上修改。

HashMap的實例有兩個實例會影響其性能:初始容量和加載因子。初始容量就是這個HashMap中數組的大小,加載因子就是當元素達到數組大小的多少時,就開始擴充數組大小。HashMap默認的初始容量爲16,加載因子爲0.75,也就是說當元素達到12個的時候,將調用rehash開始進行數組的擴充。

Hashtable

Hashtale是一個比較老的類,現在基本很少使用,與HashMap相比,它是線程安全的,因次性能上要比HashMap低,且不允許使用null作爲鍵和值。

HashMap和Hashtable都是兩個key通過equals方法比較返回true,並且兩個key的hashcode值也相同。

LinkedHashMap

Map接口哈希表和鏈接表的實現,具有可預知的迭代順序。它與HashMap不同,維護着一個運行於所有條目的雙重連接表,這個鏈接表定義了迭代順序,此迭代順序通常就是插入到映射中的順序。

TreeMap

SortedMap接口的基於紅黑樹的實現,此類保證了映射按照升序循序排列關鍵字,根據使用的構造方法不同,可能按照鍵的類的自然順序進行排序,或者在創建時按照所實現的比較器進行排序。該實現也是不同步的。


 

 

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