有时候需要删除hashmap中的某个对象,但是是通过循环方法,比如需求:
HashMap<String, ArrayList<String>> hashMap=new HashMap<String, ArrayList<String>>();
删除hashMap中所有value的数组长度小于3的项。这是就需要循环去删除了。
第一种方法:
for (String keyType : hashMap.keySet()
) {
ArrayList<TemplateBase> listTemp = hashMap.get(keyType);
if (listTemp.size() <3) {
hashMap.remove(keyType);
}
}
这是就会报错java.util.ConcurrentModificationException,这是因为在源码中,删除当前的元素,导致循环时的下一个的指针也丢失了。
第二种方法:
Iterator<Map.Entry<String, ArrayList<String>>> it = hashMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, ArrayList<String>> entry = it.next(); ArrayList<String> val = entry.getValue(); if (val.size() < 3) { it.remove(); } }
这种方法,就可以成功,不会导致下个指针丢失。