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