遍歷Map的幾種方式

2022-09-11 06:48:12 字數 1903 閱讀 5450

j**a中的map遍歷有多種方法,從最早的iterator,到j**a5支援的foreach,再到j**a8 lambda,讓我們一起來看下具體的用法以及各自的優缺點

如果只需要map的key或者value,用map的keyset或values方法無疑是最方便的

1

/**2

* 遍歷map

3* 只遍歷key的set集合4*/

5public

void keysets(mapmap)

9 }

1

/**2

* 遍歷map

3* 只遍歷value的set集合4*/

5public

void getvalues(mapmap)

9 }

如果需要同時獲取key和value,可以先獲取key,然後再通過map的get(key)獲取value

需要說明的是,該方法不是最優選擇,一般不推薦使用

1

/**2

* 遍歷map

3* 只遍歷key,通過key拿到value4*/

5public

void keyset(mapmap)

10 }

通過對map entryset的遍歷,也可以同時拿到key和value,一般情況下,效能上要優於上一種,這一種也是最常用的遍歷方法

1

/**2

* 遍歷map

3* entryset遍歷key/value的set集合4*/

5public

void entryset(mapmap)

10 }

對於上面的幾種foreach都可以用iterator代替,其實foreach在j**a5中才被支援,foreach的寫法看起來更簡潔

但iterator也有其優勢:在用foreach遍歷map時,如果改變其大小,會報錯,但如果只是刪除元素,可以使用iterator的remove方法刪除元素

1

/**2

* 遍歷map

3* iterator迭代器遍歷entryset4*/

5public

void iterator(mapmap)

13 }

j**a8提供了lambda表示式支援,語法看起來更簡潔,可以同時拿到key和value,不過,經測試,效能低於entryset,所以更推薦用entryset的方式

1

/**2

* 遍歷map

3* jdk1.8的新特性 lambda表示式遍歷map4*/

5public

void lambda(mapmap));

10 }

用10萬條資料,做了乙個簡單效能測試,資料型別為integer,map實現選取hashmap

1

static

5 }

測試結果如下:

keyset:           392values:           320keyset get(key):  552entryset:         465entryset iterator:508lambda:           536

需要說明的是,map儲存的資料型別,map的大小,以及map的不同實現方式都會影響遍歷的效能,所以該測試結果僅供參考

如果只是獲取key,或者value,推薦使用keyset或者values方式

如果同時需要key和value推薦使用entryset

如果需要在遍歷過程中刪除元素推薦使用iterator

如果需要在遍歷過程中增加元素,可以新建乙個臨時map存放新增的元素,等遍歷完畢,再把臨時map放到原來的map中

Map的幾種遍歷方式

public class mapiterator entryset for map.entryentry map.entryset jdk8 map.foreach s,o system.out.println s o map.foreach s,o keyset 先通過map.keyset 獲取k...

遍歷Map的幾種方式

map的遍歷方式 public class iteration 第二種使用values遍歷values值 system.out.println 第二種使用values遍歷 for string value map.values 第三種使用entryset遍歷 system.out.println 第...

遍歷Map的幾種方式

public static void main string args 第二種 通過iterator迭代器遍歷迴圈map.entryset iterator system.out.println 通過map.entryset使用iterator遍歷key和value iterator it map....