日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

[Java基础]Map集合的遍历

發布時間:2025/3/21 java 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Java基础]Map集合的遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Map集合是Java中非常常用的一個集合,通過Map集合可以實現對數據的快速檢索和插入刪除等操作;同樣對Map集合的遍歷也是十分重要的;如果你之前學過C++,那么對于Map的遍歷操作可就不能像是C++那樣通過下標遍歷了;

這里我提供兩種遍歷Map集合的方式,以及性能和使用方式的比較;

通過key獲取value

這種方式是獲取Map的key值,通過 Map 的 get() 方法 獲取對應的value值;

代碼如下:

import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;public class MapTraverse01 {public static void main(String[] args) {Map<Integer, String> map = new HashMap<>(); // 創建一個HashMap對象// 存入mapmap.put(1, "張三");map.put(2, "李四");map.put(3, "王五");map.put(4, "趙六");map.put(5, "小三");// 迭代器遍歷Set<Integer> set = map.keySet(); // 獲取key對應的Set集合Iterator<Integer> iterator = set.iterator(); // 通過迭代器遍歷while (iterator.hasNext()) {Integer i = iterator.next();// 輸出key并通過key輸出valueSystem.out.println("key:" + i + " value:" + map.get(i));}System.out.println("=================");// foreach循環for (Integer i : map.keySet()) {System.out.println("key:" + i + " value:" + map.get(i));}System.out.println("=================");} }

輸出如下:

key:1 value:張三 key:2 value:李四 key:3 value:王五 key:4 value:趙六 key:5 value:小三 ================= key:1 value:張三 key:2 value:李四 key:3 value:王五 key:4 value:趙六 key:5 value:小三 =================

這里我用了迭代器和foreach循環,至于它們的區別我會在文章最后詳細介紹

接下來分析一下這種方法的效率;
我們通過 keySet() 方法獲取到了所有的key值,并沒有獲取到value值,這意味著每次遍歷時通過 get() 方法得到value值時都需要再次遍歷Map集合,就相當于遍歷了兩次,第一次是對key的Set集合遍歷,第二次是通過map.get(key)來獲取value值;
一旦數據量大的時候,這種遍歷方式的效率就會明顯降低;

當然,如果數據量較小時還是比較推薦這種方法的;

同時獲取key和Value

這種方法是同時獲取到 key 和 value 值,這里就不再使用 keySet() 方法了,而是使用 entrySet() 獲取Map中的key-value對;


這里還是簡單介紹一下Map.Entry<K,V>接口

public static interface Map.Entry<K,V>

英語好的可以結合理解一下對Map.Entry<K,V>接口的介紹:

A map entry (key-value pair). The Map.entrySet method returns a collection-view of the map, whose elements are of this class. The only way to obtain a reference to a map entry is from the iterator of this collection-view. These Map.Entry objects are valid only for the duration of the iteration; more formally, the behavior of a map entry is undefined if the backing map has been modified after the entry was returned by the iterator, except through the setValue operation on the map entry.

其中這里我們只需要記住兩種方法:

就是分別獲取到key值和value值;

下面我將用代碼示范一下第二種遍歷方式:

import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;public class MapTraverse02 {public static void main(String[] args) {Map<Integer, String> map = new HashMap<>(); // 創建一個HashMap對象// 存入mapmap.put(1, "張三");map.put(2, "李四");map.put(3, "王五");map.put(4, "趙六");map.put(5, "小三");// 迭代器Set<Map.Entry<Integer, String>> set = map.entrySet(); // 獲取map中的key-value對Iterator<Map.Entry<Integer, String>> iterator = set.iterator();while (iterator.hasNext()) {Map.Entry<Integer, String> i = iterator.next();// 這里必須定義局部變量,如果直接用迭代器獲取key后迭代器就會前移,輸出下一個value時就會到達下一個迭代的位置// System.out.println("key:" + iterator2.next().getKey() + " value:" + iterator2.next().getValue());// 上面這樣不可以// 通過Entry內部類獲取key和valueSystem.out.println("key:" + i.getKey() + " value:" + i.getValue());}System.out.println("=================");// foreach循環for (Map.Entry<Integer, String> i : map.entrySet()) {System.out.println("key:" + i.getKey() + " value:" + i.getValue());}System.out.println("=================");} }

輸出如下:

key:1 value:張三 key:2 value:李四 key:3 value:王五 key:4 value:趙六 key:5 value:小三 ================= key:1 value:張三 key:2 value:李四 key:3 value:王五 key:4 value:趙六 key:5 value:小三 =================

這種遍歷方式在數據量大的時候比第一種方式效率更高,因為是同時獲取的key和value值,所以還是要根據實際情況對這兩種遍歷方法進行選擇;

可能開始接觸Map.Entry會有不適應,多用用就好了,以后可能會考慮為Map.Entry專門寫一篇博客,在這里留個位;

迭代器遍歷和foreach遍歷的區別

這里簡單說一下這兩種遍歷方式的區別;
迭代器遍歷的效率會比foreach循環遍歷的效率高一點,但是它們的主要區別并不在這里;

只需要記住一點:
如果用foreach循環體,那么對集合元素進行增刪改操作的時候,
就會出現異常ConcurrentModificationException
所以foreach僅僅用來遍歷輸出還是方便的,但是不要用來修改集合的數據;

如果需要對集合進行增刪改操作,那么就使用迭代器遍歷,可以使用 iterator 的 remove()方法;

這里就不做示范了,感興趣可以自己嘗試;

總結

以上是生活随笔為你收集整理的[Java基础]Map集合的遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。