1. 程式人生 > >java——刪除HashMap中所有的鍵值對

java——刪除HashMap中所有的鍵值對

第一種:❌(報錯)

import java.util.HashMap;
import java.util.Set;

public class T{
    public static void main(String[] args) {
        HashMap<String, String> userContents = new HashMap<>();
        userContents.put("a", "1");
        userContents.put("b","2");
        Set<String> keys = userContents.keySet();
        System.out.println(keys);
        
for(String key : keys){ userContents.remove(key); } } }

異常:java.util.ConcurrentModificationException

具體沒有深入研究,“同時修改異常”,我確實記得foreach迴圈不能有修改操作。

第二種:(迭代器)

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

public class T{
    public static void main(String[] args) {
        HashMap
<String, String> userContents = new HashMap<>(); userContents.put("a", "1"); userContents.put("c","3"); userContents.put("asas", "asaq"); userContents.put("aaa","33"); System.out.println("before : " + userContents); for(Iterator<Map.Entry<String, String>> it = userContents.entrySet().iterator() ; it.hasNext();){ Map.Entry
<String, String> item = it.next(); it.remove(); } System.out.println("after : " + userContents); } }

很神奇的是,必須要有item這個變數儲存it.next(),雖然 item並沒有被用到,但如果刪掉這句話就會報錯:java.lang.IllegalStateException。

說是刪除這行程式碼的話,指標找不到下一個節點,emmm 不太懂迭代器的具體原理...