3.1 使用forEach移除元素 - 错误做法 假如我们尝试在foreach循环中移除Map中的元素,代码可能会如下所示: for(Stringkey:map.keySet()){if(key.equals("banana")){map.remove(key);// 会抛出ConcurrentModificationException}} 1. 2. 3. 4. 5. 执行这段代码会抛出ConcurrentModificationException,这说明在遍历过...
String>map=newHashMap<>();map.put(1,"Apple");map.put(2,"Banana");map.put(3,"Cherry");// 使用foreach循环遍历Map并删除指定元素intkeyToRemove=2;Iterator<Map.Entry<Integer,String>>iterator=map.entrySet().iterator();while(iterator.hasNext()){Map...
要想在集合遍历的过程中删除指定元素,就务必使用迭代器自身的remove方法; 再来看看内部类Itr的remove()方法,在删除元素后,有这么一句expectedModCount = modCount,同步修改expectedModCount 的值。所以,如果需要在使用迭代器迭代时,删除元素,可以使用迭代器提供的remove方法。 其他集合(Map/Set)使用迭代器迭代也是一样。
整个流程非常清晰,其实就是因为List中维护了一个变量expectedModCount,该变量是List的初始大小,当你新增或者删除元素时,会修改临时变量modCount的值,每次循环时,Java会判断两个值是否相等,如果不相等,就会抛出异常。 正常使用 那为什么“List情况4“就没问题呢?我们看一下“List情况4“的执行过程: 第1步: 第2步...
Map 规范: 使用entrySet遍历 Map类集合 KV,而不是 keySet方式进行遍历。 说明:keySet 其实是遍历了2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出key所对应的 value。而 entrySet 只是遍历了一次就把 key和value都放到了entry中,效率更高。如果是 JDK8,使用 Map.forEach 方法。
上面出现这样的原因是在使用foreach对HashMap进行遍历时,同时进行put赋值操作会有问题,异常ConcurrentModificationException。 于是帮同简单的看了一下,印象中集合类在进行遍历时同时进行删除或者添加操作时需要谨慎,一般使用迭代器进行操作。 于是告诉同事,应该使用迭代器Iterator来对集合元素进行操作。同事问我为什么?这一下...
● 在循环体中,使用entry.getKey()和entry.getValue()方法获取到当前循环的键和值。 2. 使用迭代器遍历Map集合 使用迭代器遍历Map集合也是一种常用的方法。它与使用for-each循环遍历Map集合的方式类似,但是更加灵活,可以在遍历过程中进行删除、修改等操作。在使用迭代器遍历Map集合时,需要使用entrySet()方法获取到...
1、forEach 和 Map 1.1、常规循环Map常用的方法。 Map<String ,Integer> items = new HashMap<>(); items.put("A",10)
HashMap的迭代器遍历性能与 initial capacity 有关,与size无关 二、迭代器测试 贴上测试代码: public class MapForEachTest { public static void main(String[] args) { HashMapmap0 = new HashMap(100000); initDataAndPrint(map0); HashMapmap1 = new HashMap(); ...
Java开发笔记之List删除元素foreach删除元素 错误的循环删除 代码语言:javascript 复制 ArrayList<Integer>list=newArrayList<>();for(int i=0;i<5;i++){listadd(i);}for(Integer integer:list){System.out.println(integer);if(integer.equals(3)){list.remove(integer);}}System.out.println(list);...