欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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中