Map作爲Java的一個基本集合類,在很多場所都會使用到它。在使用Map時,會經常會遇到需要遍歷整個Map情況。遍歷Map時,主要使用的是EntrySet以及KeySet這兩種遍歷方法。
以下是實現兩種遍歷方式的代碼:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* 遍歷Map
*/
public class IterateMapDemo {
/**
* 主函數
* @param args
*/
public static void main(String[] args) {
Map<String, String> areaMap = new HashMap<String, String>();
areaMap.put("Beijing", "北京");
areaMap.put("Shanghai", "上海");
areaMap.put("Tianjin", "天津");
// 遍歷
keySetIterateMap(areaMap);
entrySetIterateMap(areaMap);
}
/**
* keySet方式遍歷
* @param mapInfo
*/
private static void keySetIterateMap(Map<String, String> mapInfo) {
// for循環遍歷
Set<String> keySet = mapInfo.keySet();
for (String key : keySet) {
System.out.println("KeySet,For循環遍歷,Key:" + key + "Value:" + mapInfo.get(key));
}
// 迭代器遍歷
Iterator<String> it = mapInfo.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
System.out.println("KeySet,Iterator遍歷,Key:" + key + "Value:" + mapInfo.get(key));
}
}
/**
* entrySet遍歷
* @param mapInfo
*/
private static void entrySetIterateMap(Map<String, String> mapInfo) {
// for循環遍歷
Set<Map.Entry<String, String>> entrySet = mapInfo.entrySet();
for (Map.Entry<String, String> entry : entrySet) {
System.out.println("EntrySet,For循環遍歷,Key:" + entry.getKey() + "Value:" + entry.getValue());
}
// 迭代器遍歷
Iterator<Map.Entry<String, String>> it = mapInfo.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("EntrySet,Iterator循環遍歷,Key:" + entry.getKey() + "Value:" + entry.getValue());
}
}
}
性能對比
在數據量少的時候,兩種遍歷自然差距不會太大。但是當數據量增加的時候,就需要對比下哪種遍歷方式更快了。
以下是Map中具有1百萬條數據時,兩種遍歷方式的耗時信息(單位ms):
可以看出,EntrySet遍歷的速度要比keySet方法要快哦。這是因爲使用keySet遍歷時,當使用key值取得Map中的Value時,Map又遍歷了一遍。而EntrySe時,由於EntrySet本身就是key-value結構,所以直接將Map的key-value給取出來了,自然速度就要快上一些。另外,使用迭代器遍歷的話速度也會有一些提升。