Map集合(Java基礎、skycto JEEditor)
一、什麼是Map
不同於 List 單列的線性結構, Java 中的 Map 提供的是一種雙列對映的儲存集合,它能夠提供一對一的資料處理能力,雙列中的第一列我們稱為 key ,第二列就是 value ,一個 key 只能夠在一個 Map 中出現最多一次,透過一個 key 能夠獲取 Map 中唯一一個與之對應的 value 值,正是它的這種一對一對映的資料處理關係,在實際應用中可以透過一個 key 快速定位到對應的 value 。
Map 的三個特點:
-
包含鍵值對
-
鍵唯一
-
鍵對應的值唯一
二、Map集合常用的遍歷方式
遍歷Map 集合的常用方式有三種:
使用keySet 的方式
使用entrySet 的方式
使用values() 取值的方式
這三種方式中,都有對應的for 迴圈遍歷和Iterator 遍歷的方式取值。
keySet 是鍵的集合,Set 裡面的型別即key 的型別;
entrySet 是鍵- 值對的集合,Set 裡面的型別是Map.Entry ,Entry 是一個鍵- 值對;
keySet ():迭代後只能透過get() 取key ;
entrySet ():迭代後可以e.getKey (),e.getValue() 取key 和value ,返回的是Entry 介面;
三、遍歷的效能對比
for each 與顯示呼叫Iterator 等價,除了第三種方式(for each map.keySet()) ,再呼叫get 獲取方式外,其他三種方式效能相當。本例還是hash 值雜湊較好的情況,若雜湊演算法較差,第三種方式會更加耗時。
1 、在資料元素的數量比較大時,entrySet() 方式的遍歷效率快於keySet() ,有兩個原因 :
(1 )一個原因是keySet 相當於遍歷了2 次,一次是對key 的Set 集合的遍歷,二次是每次遍歷過程都要透過key 和map.get(key) 來獲取value 值。
(2 )第二個原因是map.get(key) 的時候,底層是根據key 的hashCode 值經過雜湊演算法得到一個hash 值,然後作為索引對映到對應的table 陣列的索引位置,這是一次密集型計算,很耗費CPU ,如果有大量的元素,則會使CPU 使用率飆升,影響響應速度,而entrySet() 返回的set 裡面的元素都是Map.Enpty 型別,key 和value 就是這個類的一個屬性,entry.getKey() 和entry.getValue() 效率肯定很高。
2 、不過,在資料元素的數量比較小的情況小,keySet() 方式的遍歷效率快於entrySet() 。
3 、values() 是返回Map 的所有value 的集合的Collection ,只能遍歷到value ,很難遍歷到key ,所以一般不用,如果當我們只需要取得value 值時,採用values 來遍歷效率更高。
4 、從上面的幾種方式的for 迴圈遍歷和Iterator 遍歷的方式耗時結果來看,Iterator 遍歷的效率會比for 迴圈效率更快一點。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947338/viewspace-2656816/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 基礎(七)集合原始碼解析 MapJava原始碼
- Java中文分片語件 - word分詞(skycto JEEditor)Java分詞
- java基礎學習之九:集合型別Set/List/MapJava型別
- java基礎-StringBuild、StringBuffer,集合List、Map、SetJavaUI
- 【Java基礎】集合Java
- 傳智黑馬java基礎學習——day20(集合Map)Java
- final關鍵字的作用(skycto JEEditor)
- hashCode()和equals()的區別?(skycto JEEditor)
- 小白科普:敏捷軟體開發(skycto JEEditor)敏捷
- JavaWeb DWR使用總結(skycto JEEditor框架功能)JavaWeb框架
- Java基礎-集合框架Java框架
- Java集合類——MapJava
- JAVA集合——Map介面Java
- jvm的記憶體引數配置(skycto JEEditor)JVM記憶體
- java 基礎之 Set、Map、ListJava
- 【JAVA】【面試】【基礎篇】- 集合Java面試
- java基礎詳解-集合Java
- finally語句塊的有限範圍(skycto JEEditor)
- final、finally、finalize()的區別(skycto JEEditor)
- 眼鏡 進銷存 ERP設計(skycto JEEditor)
- JAVA集合框架 - Map介面Java框架
- Java Map集合練習Java
- java中的Map集合Java
- java基礎學習之十:集合型別Set/List/Map(TreeSet,LinkedList,TreeMap)Java型別
- Java容器 | 基於原始碼分析Map集合體系Java原始碼
- 智慧場館&科技館 智慧控制 建設方案(skycto JEEditor)
- final與static關鍵字的區別?(skycto JEEditor)
- Java程式設計基礎17——集合(List集合)Java程式設計
- java集合框架基礎總結Java框架
- Java基礎之淺談集合Java
- 【Java基礎】--Java容器剖析:Set、List、Map介面Java
- Java集合四:Map簡介;Java
- Java Collection、Map集合總結Java
- Kotlin——高階篇(四):集合(Array、List、Set、Map)基礎Kotlin
- 四川科技館 智慧控制 協議設計(skycto JEEditor)協議
- Java 基礎 - 各項集合實現Java
- 基礎篇:JAVA集合,面試專用Java面試
- Java基礎集合簡單總結Java