以下代码在地图上进行迭代,并在找到密钥后删除:
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(Integer.valueOf(1), "aman");
map.put(Integer.valueOf(2), "sachin");
for (Map.Entry<Integer, String> temp : map.entrySet()) {
if (temp.getKey() == 2) {
System.out.println("*");
map.remove(temp.getKey());
}
}
}
以上代码无例外运行。但是,将if条件更改为:
if (temp.getKey() == 1) {
代码抛出
线程“ main”中的异常java.util.ConcurrentModificationException
关于进一步的更改,如下所示:
map.put(Integer.valueOf(10), "aman");
map.put(Integer.valueOf(20), "sachin");
for (Map.Entry<Integer, String> temp : map.entrySet()) {
if (temp.getKey() == 10) {
运行成功。但是,将if条件更改为:
if (temp.getKey() == 20) {
代码再次抛出
线程“ main”中的异常java.util.ConcurrentModificationException
我知道Integer高速缓存用于为值-128至127的整数提供相同的实例。无论如何,这与这里相关吗? 谁能解释为什么地图在1,2和10,20上表现出不同?