常见的Map遍历方法
一、通过map.keySet()
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String, String>();
map.put("A", "1");
map.put("B", "2");
map.put("C", "2");
map.put("D", "4");
Set<String> set = map.keySet(); //返回map key的Set集合
for(String t: set){
String key = t;
String value = map.get(key);
System.out.println("Key:"+key+",Value:"+value);
}
}
}
二、通过map.entrySet()
又分成两种具体的写法,主要区别在于遍历map.entrySet()结果
- 通过增强for循环遍历map.entrySet()结果得到Key和Value
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("A", "1");
map.put("B", "2");
map.put("C", "2");
map.put("D", "4");
Set<Map.Entry<String, String>> set = map.entrySet();
for (Map.Entry<String, String> ent : set) {
String key = ent.getKey();
String value = ent.getValue();
System.out.println("Key:"+key+",Value:"+value);
}
}
}
- 通过增强Iterator遍历map.entrySet()结果得到Key和Value
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("A", "1");
map.put("B", "2");
map.put("C", "2");
map.put("D", "4");
Set<Map.Entry<String, String>> set = map.entrySet();
Iterator<Map.Entry<String, String>> ite = set.iterator();
while(ite.hasNext()){
Map.Entry<String, String> ent = ite.next();
String key = ent.getKey();
String value = ent.getValue();
System.out.println("Key:"+key+",Value:"+value);
}
}
}
三、通过map.values()
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("A", "1");
map.put("B", "2");
map.put("C", "2");
map.put("D", "4");
Collection<String> values = map.values();
for(String v : values){
System.out.println("Values: " + v);
}
}
}
简单的性能分析
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
//放入10万个数据
for(int t=0; t<100000; ++t){
map.put(Integer.toString(t), "B");
}
long t_keySet = testKeySet(map);
long t_entrySet = testEntrySet(map);
long t_values = testValues(map);
//打印map.keySet()耗时
System.out.println("map.keySet():"+t_keySet);
//打印map.entrySet()耗时
System.out.println("map.entrySet():"+t_entrySet);
//打印map.values()耗时
System.out.println("map.values():"+t_values);
}
//测试map.keySet()方法效率
public static long testKeySet(Map<String, String> map){
long time = System.currentTimeMillis();
Set<String> set = map.keySet(); //返回map key的Set集合
for(String t: set){
String key = t;
String value = map.get(key);
System.out.println("Key:"+key+",Value:"+value);
}
time = System.currentTimeMillis()-time;
return time;
}
//测试map.entrySet()方法效率
public static long testEntrySet(Map<String, String> map){
long time = System.currentTimeMillis();
Set<Map.Entry<String, String>> set = map.entrySet();
for (Map.Entry<String, String> ent : set) {
String key = ent.getKey();
String value = ent.getValue();
System.out.println("Key:"+key+",Value:"+value);
}
time = System.currentTimeMillis()-time;
return time;
}
//测试map.values()方法效率
public static long testValues(Map<String, String> map){
long time = System.currentTimeMillis();
Collection<String> values = map.values();
for(String v : values){
System.out.println("Values: " + v);
}
time = System.currentTimeMillis()-time;
return time;
}
}
第一次:
map.keySet():1241
map.entrySet():1373
map.values():807
第二次:
map.keySet():1241
map.entrySet():1369
map.values():798
第三次:
map.keySet():1239
map.entrySet():1373
map.values():805
总结:
如果是只需要值的话推荐最后一种,需要键值对话推荐第二种。
注:以上版本在jdk1.8中测试结果不同版本效率可能出现差异
参考:
Map集合的四种遍历方式