怎么遍历map集合时修改map
遍历map集合有很多方式方法,根据自己业务场景业务逻辑采用不同的方式,首先定义一个map集合,并且赋值。
接下来说第一种方式,HashMap entrySet() 遍历方法,具体方法看代码,后边说一下和keyset() values() 的区别。
执行代码,查看步骤2中代码执行的结果:
遍历map的第二种方式,HashMap keySet() 遍历方法,具体方法直接看如下代码:
执行代码,查看步骤4中代码执行的结果:
第三种方法,HashMap values() 遍历方法,具体方式看如下代码:
执行代码,查看步骤6中代码执行的结果:
步骤2/4/6中分别采用了KeySet() entrySet() values()三种方法来遍历map集合。这里说一下这三种方法的区别:
values() : 是获取集合中的所有的值----没有键,没有对应关系。
KeySet() : 将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 迭代后只能通过get()取key 。
entrySet():是返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系,迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 。
第四种方式,使用 For ... Each 进行遍历,具体方法如下:
执行代码,查看步骤9中代码执行的结果:
java迭代器可以遍历map吗
刚才回顾了一下:(JDK1.7以前,含1.7)
可以迭代,但是不能直接迭代,Map集合没有迭代器,也没有实现什么迭代器接口!
这个只是迭代方式1:
迭代器是针对单列集合:Collection使用的,既:List与Set旗下小弟使用!
Map集合可以返回一个Set集合,里面都是键Key
既然可以返回一个Set集合,那么就可以拿迭代器对这个Set集合进行迭代,迭代Set集合同时
间接就可以获取Map的value项,达到迭代Map的目的!
还有第二种方式也可以迭代:
Map集合也可以返回一个Map.Entry(映射项)对象,这个玩意也被封装在一个Set集合中
这个玩意有自己的内部方法,也可以直接获取键值,以达到迭代目的!
提示一下:(JDK1.8开始增加了Map.froEach,Lambda拉姆达表达式);
java遍历Map的几种方法分析
1.先初始化一个map
public class TestMap {
public static Map《Integer, Integer》 map = new HashMap《Integer, Integer》();
}
2.keySet values
如果只需要map的key或者value,用map的keySet或values方法无疑是最方便的
// KeySet 获取key
public void testKeySet() {
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
// values 获取value
public void testValues() {
for (Integer value : map.values()) {
System.out.println(value);
}
}
3.keySet get(key)
如果需要同时获取key和value,可以先获取key,然后再通过map的get(key)获取value
需要说明的是,该方法不是最优选择,一般不推荐使用
// keySet get(key) 获取key and value
public void testKeySetAndGetKey() {
for (Integer key : map.keySet()) {
System.out.println(key + “:“ + map.get(key));
}
}
4.entrySet
通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于上一种,这一种也是最常用的遍历方法
// entrySet 获取key and value
public void testEntry() {
for (Map.Entry《Integer, Integer》 entry : map.entrySet()) {
System.out.println(entry.getKey() + “:“ + entry.getValue());
}
}
5.Iterator
对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁
但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素
// Iterator entrySet 获取key and value
public void testIterator() {
Iterator《Map.Entry《Integer, Integer》》 it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry《Integer, Integer》 entry = it.next();
System.out.println(entry.getKey() + “:“ + entry.getValue());
// it.remove(); 删除元素
}
}
-遍历map