您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何利用HashMap實現(xiàn)一個遍歷功能,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
map的幾種遍歷方式:
Map< String, String> map = new HashMap<>(); map.put("aa", "@sohu.com"); map.put("bb","@163.com"); map.put("cc", "@sina.com"); System.out.println("普通的遍歷方法,通過Map.keySet遍歷key和value");//普通使用,二次取值 for (String key : map.keySet()) { System.out.println("key= "+key+" and value= "+map.get(key)); } System.out.println("通過Map.entrySet使用iterator遍歷key和value:"); Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry<String, String> entry = it.next(); System.out.println("key= "+entry.getKey()+" and value= "+entry.getValue()); } System.out.println("通過Map.entrySet遍歷key和value"); //推薦這種,特別是容量大的時候 for(Map.Entry<String, String> entry : map.entrySet()){ System.out.println("key= "+entry.getKey()+" and value= "+entry.getValue()); } ??System.out.println(“通過Map.values()遍歷所有的value,但不能遍歷key”); for(String v : map.values()){ System.out.println("value = "+v); }
HashMap和Hashtable的聯(lián)系和區(qū)別
實現(xiàn)原理相同,功能相同,底層都是哈希表結(jié)構(gòu),查詢速度快,在很多情況下可以互用,早期的版本一般都是安全的。
HashMap和Hashtable都實現(xiàn)了Map接口,但決定用哪一個之前先要弄清楚它們之間的分別。主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。
HashMap幾乎可以等價于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受為null的鍵值(key)和值(value),而Hashtable則不行)。
HashMap是非synchronized,而Hashtable是synchronized,這意味著Hashtable是線程安全的,多個線程可以共享一個Hashtable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴(kuò)展性更好。
另一個區(qū)別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當(dāng)有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這并不是一個一定發(fā)生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區(qū)別。
由于Hashtable是線程安全的也是synchronized,所以在單線程環(huán)境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過Hashtable。
HashMap不能保證隨著時間的推移Map中的元素次序是不變的。
hashmap的特點
HashMap是map接口的子類,是將鍵映射到值的對象,其中鍵和值都是對象,不是線程安全的
hashMap用hash表來存儲map的鍵
? key是無序唯一,可以有一個為null
? value無序不唯一,可以有對個null
linkedHashMap使用hash表存儲map中的鍵,并且使用linked雙向鏈表管理順序
我們用的最多的是HashMap,在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。如果需要輸出的順序和輸入的相同,那么用LinkedHashMap 可以實現(xiàn),它還可以按讀取順序來排列.
HashMap是一個最常用的Map,它根據(jù)鍵的hashCode值存儲數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多只允許一條記錄的鍵為NULL,允許多條記錄的值為NULL。 HashMap不支持線程同步,即任一時刻可以有多個線程同時寫HashMap,可能會導(dǎo)致數(shù)據(jù)的不一致性。
如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的。
HashMap可以通過下面的語句進(jìn)行同步:
Map m = Collections.synchronizeMap(hashMap);
幾大常用集合的效率對比
關(guān)于如何利用HashMap實現(xiàn)一個遍歷功能就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。