Map集合(Java基礎、skycto JEEditor)

書寫人生發表於2019-09-11

一、什麼是Map

不同於 List 單列的線性結構, Java 中的 Map 提供的是一種雙列對映的儲存集合,它能夠提供一對一的資料處理能力,雙列中的第一列我們稱為 key ,第二列就是 value ,一個 key 只能夠在一個 Map 中出現最多一次,透過一個 key 能夠獲取 Map 中唯一一個與之對應的 value 值,正是它的這種一對一對映的資料處理關係,在實際應用中可以透過一個 key 快速定位到對應的 value

Map 的三個特點:

  1. 包含鍵值對

  2. 鍵唯一

  3. 鍵對應的值唯一

二、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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章