* 遍历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&lt;String, String&gt; map = new HashMap&lt;&gt;();
		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")...