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

具体没有深入研究,“同时修改异常”,迭代器是不能这样做的。

第二种:(迭代器)

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 不太懂迭代器的具体原理...


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM