Java中遍历Map的几种方法
程序员文章站
2024-02-17 12:25:10
...
Java中遍历Map的几种方法
Java中的Map遍历有很多方法,有Iterator,到Java 5 支持的foreach,Java 8 引入的Lambda等;
先初始化一个Map:
public class MapTest{
public static Map<Integer,Integer> map = new HashMap<Integer,Integer>();
public static void main(String[] args) {
for(int i = 0; i < 10; i++){
map.put(i,i+1);
}
}
}
Iterator
foreach的写法看起来更简洁,但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错;
如果只是删除元素,可以使用Iterator的remove方法删除元素;
如果要在遍历过程中增加元素,可以新建一个map存放新增的元素,等遍历完毕,再用putAll方法把临时map放到原来的map中;
// Iterator 和 map的entrySet
public void testIterator() {
Iterator<Map.Entry<Integer, Integer>> iterator= map.entrySet().iterator();
Map<Integer,Integer> newMap = new HashMap<Integer,Integer>();
while (iterator.hasNext()) {
Map.Entry<Integer, Integer> entry = iterator.next();
System.out.println("key:"+ entry.getKey() + " ; " + "value:"+ entry.getValue());//遍历打印 key和value
if (entry.getKey() % 2 == 0) {
newMap.put(entry.getKey() + 10,entry.getValue()); //新增元素操作
iterator.remove(); //删除元素
}
}
map.putAll(newMap);
}
Lambda
// Lambda 获取key and value
public void testLambda() {
map.forEach((key, value) -> {
System.out.println("key:"+ key + ";" + "value" + value);
});
}
keySet
pubilc void testKeySet() {
// keySet 获取key
for (Integer key : map.keySet()) {
System.out.println(key);
}
// values 获取value
for (Integer value : map.values()) {
System.out.println(value);
}
// keySet get(key) 获取key and value
for (Integer key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}
entrySet
通过map的entrySet遍历,可以同时拿到key和value,是最常用的遍历方法
public void testEntrySet(){
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
总结
如果只是获取key,或者value,推荐使用keySet或者values方式
如果同时需要key和value推荐使用entrySet
如果需要在遍历过程中删除元素推荐使用Iterator
如果需要在遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中