Java 遍历Map时 删除元素

 1 package net.nie.test;
 2
 3 import java.util.HashMap;
 4 import java.util.Iterator;
 5 import java.util.Map;
 6
 7 public class HashMapTest {
 8    private static Map<Integer, String> map=new HashMap<Integer,String>();
 9
10    /**  1.HashMap 类映射不保证顺序;某些映射可明确保证其顺序: TreeMap 类
11     *   2.在遍历Map过程中,不能用map.put(key,newVal),map.remove(key)来修改和删除元素,
12     *   会引发 并发修改异常,可以通过迭代器的remove():
13     *   从迭代器指向的 collection 中移除当前迭代元素
14     *   来达到删除访问中的元素的目的。
15     *   */
16    public static void main(String[] args) {
17         map.put(1,"one");
18         map.put(2,"two");
19         map.put(3,"three");
20         map.put(4,"four");
21         map.put(5,"five");
22         map.put(6,"six");
23         map.put(7,"seven");
24         map.put(8,"eight");
25         map.put(5,"five");
26         map.put(9,"nine");
27         map.put(10,"ten");
28         Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
29         while(it.hasNext()){
30             Map.Entry<Integer, String> entry=it.next();
31             int key=entry.getKey();
32             if(key%2==1){
33                 System.out.println("delete this: "+key+" = "+key);
34                 //map.put(key, "奇数");   //ConcurrentModificationException
35                 //map.remove(key);      //ConcurrentModificationException
36                 it.remove();        //OK
37             }
38         }
39         //遍历当前的map;这种新的for循环无法修改map内容,因为不通过迭代器。
40         System.out.println("-------\n\t最终的map的元素遍历:");
41         for(Map.Entry<Integer, String> entry:map.entrySet()){
42             int k=entry.getKey();
43             String v=entry.getValue();
44             System.out.println(k+" = "+v);
45         }
46     }
47 }
时间: 2024-10-10 16:01:44

Java 遍历Map时 删除元素的相关文章

Python遍历列表时删除元素

无论是使用for还是while,当在从前往后遍历的同时删除列表中的元素时,都会发生些问题. 要从lst = [1,4,0,1,5,0,3,5]中删除所有0元素,有两个比较好的方法: 1 使用filter: lst = filter(lambda x : x != 0, lst) 2 使用列表解析: lst = [x for x in lst if x != 0] 这两种方式既简洁,可读性又好 ref: https://segmentfault.com/a/1190000007214571 原文地

Java遍历List并删除某些元素

Java遍历List并删除某些元素 ? 在阿里的Java编程规约中有一条:[强制]不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁. ? 这里不禁要问为什么? ? 首先来试一下,遍历List时删除元素究竟行不行: public class IteratorTest { public static void singleThreadRemove1(){ List<String> list = n

java 集合遍历时删除元素

本文探讨集合在遍历时删除其中元素的一些注意事项,代码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 import java.util.ArrayList; import java.util.Iterator; import java

多线程14-遍历集合时删除元素问题分析

1. 问题 创建一个User类: package cn.itcast.heima2; public class User implements Cloneable{ private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if(this == obj) { ret

Java遍历Map集合方法

package testMap; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /**  * 循环遍历Map集合  *   * @author Administrator  *   */ pub

Java 遍历Map

Set<Map.Entry<String, String>> aSet = map.entrySet(); Iterator<Map.Entry<String, String>> iter = aSet.iterator(); while(iter.hasNext()){ Map.Entry<String, String> mp = iter.next(); System.out.println(mp.getKey()+" =>

Java遍历Map键、值。获取Map大小的方法

Map读取键值对,Java遍历Map的两种实现方法 第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值 import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class HashMapTest2 { public static void main(String[] args) { HashMap map = new HashMap();

java 遍历map 方法 集合 五种的方法

以下是转载别人的日志,以方便自己以后使用,仅供自己学习之用. package com.jackey.topic; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; //循环遍历map的方法 public class CircleMap {  public

【GoLang笔记】遍历map时的key随机化问题及解决方法

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的.由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的.熟悉hashmap的同学对这个情况应该非常清楚. 所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明. 1. 通过range遍历map时,key的顺序被随机化 在golang 1.4版本中,借助关键字range对Go语