Hashmap remove()方法仅对某些输入抛出ConcurrentModificationException,而对其他输入则不会抛出ConcurrentModificationException

时间:2018-12-07 12:08:28

标签: java hashmap

以下代码在地图上进行迭代,并在找到密钥后删除:

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上表现出不同?

0 个答案:

没有答案