以下绝大多数出自:java遍历map的4种方式
public class ErgodicMap {
public static void main(String[] args) {
Map<Integer,Integer> map=new HashMap<>();
map.put(1,2);
map.put(2,3);
map.put(3,4);
//方式1,entrySet遍历,在键和值都需要时使用(最常用)
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
}
//2.通过keySet或values来实现遍历,性能略低于第一种方式
System.out.print("key:");
for(Integer key:map.keySet()){
System.out.print(key+",");
}
System.out.println();
System.out.print("value:");
for(Integer vlaue:map.values()){
System.out.print(vlaue+",");
}
System.out.println();
//方式3,Iterator遍历
Iterator<Map.Entry<Integer,Integer>> it=map.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry=it.next();
if((int)entry.getKey()==1){//此处把key为1的键值对移除,因此方式3和4的遍历结果中没有key为1,value为2的键值对
it.remove();//如果想要在遍历时移除键值对,就用Iterator这种方式
continue;
}
System.out.println("key:"+entry.getKey()+",vlaue:"+entry.getValue());
}
//方式4,java8,lambda
//java8提供了lambda表达式,语法更简洁,可以同时拿到key和value
//不过,经测试,性能没有entrySet好
map.forEach((key,value)->{
System.out.println("key:"+key+",vlaue:"+value);
});
}
}
运行结果:
key:1,value:2
key:2,value:3
key:3,value:4
key:1,2,3,
value:2,3,4,
key:2,vlaue:3
key:3,vlaue:4
key:2,vlaue:3
key:3,vlaue:4
总结:
1)如果同时获取key和value推荐使用第1种方式,使用entrySet遍历;
2)如果只获取key,或者value,推荐使用第2中方式,通过keySet()或vlaues()来遍历;
3)如果需要在遍历的过程中删除元素推荐使用第3种方式,删除方式见代码;
4)如果需要在遍历时增加元素,可以新建一个临时map存放新增元素,遍历完毕后再把临时map放到原来的map中。