* 遍历List的三种方法:
* 1)for:问题:每次删除后后面的元素会向前移动
* 2)增强for循环:问题:抛并行访问修改操作异常java.util.ConcurrentModificationException
* 3)迭代器Iterator:没问题
public class ListRemove {
* 普通for循环
@Test
public void listForRemove() {
List
list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
for(int i=0; i list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
for(String a : list) {
list.remove(a);
printList(list);
/*抛异常
java.util.ConcurrentModificationException
* 迭代器Iterator
@Test
public void listIteratorRemove() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
String next = iterator.next();
if("b".equals(next))
iterator.remove();
printList(list);
/*抛异常
java.util.ConcurrentModificationException
private void printList(List list) {
for(int i=0; i
Set操作
package collectionDel;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
* @author MrLeeYongSheng
* 使用增强for循环遍历删除:抛java.util.ConcurrentModificationException
* 使用iterator便利删除:没问题
public class SetRemove {
Set<String> set;
@Before
public void beforeClass() {
set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
* 遍历增强for循环遍历set删除
@Test
public void setRemove() {
for (String v : set) {
set.remove(v);
printSet(set);
//抛java.util.ConcurrentModificationException
* 使用Iterator遍历set来删除
@Test
public void setIteratorRemove() {
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
String next = iterator.next();
if("b".equals(next))
iterator.remove();
printSet(set);
private void printSet(Set<String> set) {
for (String string : set) {
System.out.println(string);
* 2:通过entrySet
* 删除也有两种:
* 1:map.remove(key):会抛java.util.ConcurrentModificationException
* 2:iterator.remove():没问题
public class MapRemove {
Map<String, String> map;
@Before
public void beforeClass() {
map = new HashMap<String, String>();
map.put("a", "a");
map.put("b", "b");
map.put("c", "c");
* 遍历keySet的方法来删除
@Test
public void mapKeySetRemove() {
Set<String> keySet = map.keySet();
for (String key : keySet) {
map.remove(key);
//keySet.remove(key);
printMap(map);
/*抛异常
java.util.ConcurrentModificationException
* 使用迭代器Iterator遍历keySet的方法来删除
@Test
public void mapKeySetIteratorRemove() {
Set<String> keySet = map.keySet();
Iterator<String> setIterator = keySet.iterator();
while(setIterator.hasNext()) {
String obj = setIterator.next();
if("b".equals(obj))
setIterator.remove();
printMap(map);
* 遍历EntrySet来删除
@Test
public void mapEntrySetRemove() {
Set<Entry<String,String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
String key = entry.getKey();
//entrySet.remove(entry);
map.remove(key);
printMap(map);
/*抛异常
java.util.ConcurrentModificationException
* 使用Iterator来遍历entrySet来删除
@Test
public void mapEntrySetIteratorRemove() {
Set<Entry<String,String>> entrySet = map.entrySet();
Iterator<Entry<String, String>> iterator = entrySet.iterator();
while(iterator.hasNext()) {
Entry<String, String> next = iterator.next();
if("b".equals(next.getKey()))
iterator.remove();
printMap(map);
private void printMap(Map<String,String> map) {
/*Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key+"=="+map.get(key));
for(Map.Entry<String, String> entry:map.entrySet()){
String k=entry.getKey();
String v=entry.getValue();
System.out.println(k+"=="+v);
假如有一个Map和一个Set,我们要删除Map中key在Set里面的元素,这种情况只需遍历Set,然后分别删除Map中对应的元素即可。但假如我们要删除Map中key不在Set里面的元素,这时就不能遍历Set了,此时需要遍历Map,如下:
Map<String, String> map = new HashMap<>();
map.put("a", "a");
// A code block
Iterator<Element<L>> iterator = repeat.iterator();
while(iterator.hasNext()) {
Element<L> elem = iterator.next();
if(elem.getLabel().equals(la
map遍历判断筛选删除时如果对map使用put、remove或clear方法(例如map.remove直接删除),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModificationException异常被抛出).当Iterator.remove方法导致map发生变化时,他会更新cursor来同步这一变化。参见jdk文档描述:The iterators returned ...
报错原因:采用erase移除迭代器后,迭代器的值变为-572662307,无法作为迭代器继续运算。
详细:当程序执行到 stu_map.erase(itor) 时,满足条件的第一个元素被删除,从而导致 itor 指针被删除,使其不指向任何元素。针对该问题我们首先想到的就是在删除指针之前,对其进行备份,C++ 将这个临时变量直接建立在 erase 实现里。
因此将stu_map.erase(itor)改为stu_map.erase(itor--)即可
#include <map>
#incl
要从HashSet中删除单个元素,请使用remove()方法。首先,创建一个HashSet-HashSeths=newHashSet();现在,将元素添加到HashSet-hs.add("R");hs.add("S");hs.add("T");hs.add("V");hs.add("W");hs.add("Y");hs.add("Z");现在让我们删除一个元素-hs.remove("R")...