map中remove問題

今天遇到這麼一個問題,我查到一個map,但是裏面有部分數據不是我想要的,我需要遍歷把不需要的元素刪除調,結果拋出了異常java.util.ConcurrentModificationException,後來發現Java的for循環,就是將List對象遍歷託管給Iterator,你如果要對list進行增刪操作,都必須經過Iterator,否則Iterator遍歷時會亂,所以直接對list進行刪除時,Iterator會拋出ConcurrentModificationException異常。

解決辦法:可以通過迭代器的remove();從迭代器指向的 collection 中移除當前迭代元素,來達到刪除訪問中的元素的目的。

package com.cx.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        fun();
    }
    private static void fun() {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "程嘯");
        map.put(2, "景向後山");
        System.out.println("刪除前:" + map);
        Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
        while () {
            Map.Entry<Integer,iterator.hasNext() String> next = iterator.next();
            if (next.getKey() == 1) {
                iterator.remove();
            }
        }
        System.out.println("刪除後:" + map);
    }
}

原因:iterator.hasNext()時,remove的時候指針已經指向下一個元素,引用沒有失效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章