Java中遍历Map的几种方式

首先初始化一个全局 map

public static Map<String, String> map = new HashMap<String, String>() {
    private static final long serialVersionUID = 1L;
        {
            put("name", "test");
            put("gender", "man");
            put("country", "China");
        }
}
@BeforeClass
public void initMap() {
    System.out.println(map);    // {country=China, gender=man, name=test}
}
@AfterClass
public void clearMap() {
    map.clear();
    System.out.println(map);    // {}
}

遍历 keySet

@Test
public readKeys() {
    System.out.println(map.keySet());   // [country, gender, name]
    for(String key : map.keySet()) {
        System.out.println(key + ":" + map.get(key));   
        // country:China
        // gender:man
        // name:test
    }
}

遍历 values

@Test
public readValues() {
    System.out.println(map.values());   // [China, man, test]
    for(String val : map.values()) {
        System.out.println(val);
        // China
        // man
        // test
    }
}

遍历 entrySet (iterator遍历)

Iterator遍历优势:在用foreach只能实现遍历而不能进行删除操作,使用Iterator可以通过remove方法删除元素

@Test
public readEntrys() {
    System.out.println(map.entrySet());   // [country=China, gender=man, name=test]
    Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
    while(it.hasNext()) {
        Map.Entry<String, String> entry = it.next();
        System.out.println(entry.getKey() + ":" + entry.getValue());
        // country:China
        // gender:man
        // name:test
        
        //it.remove();
    }
}

forEach 结合 Lambda(需java8以上) 遍历 key,value

@Test
public readLambda() {
    map.forEach((key, value) -> {
        System.out.println(key + ":" + value);
        // country:China
        // gender:man
        // name:test
    });
}

操作建议

  • 单纯获取key或者value,推荐使用keySe/values
  • 获取entry推荐使用entrySet
  • 遍历过程中需要删除元素推荐使用Iterator
  • 遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中

猜你喜欢

转载自www.cnblogs.com/apimhnkj/p/11684698.html