1. 程式人生 > >list集合在用iterator迭代時,修改集合長度, 不一定會引發異常

list集合在用iterator迭代時,修改集合長度, 不一定會引發異常

import java.util.ArrayList;
import java.util.List;

public class IteratorTest
{
	public static void main(String[] args)
	{
		/*
		 * list集合在用iterator迭代時,修改集合長度, 不一定會引發
		 * ConcurrentModificationException
		 * 迭代器併發修改異常
		 */
		List<String> list = new ArrayList<String>();
		list.add("aa");
		list.add("bb");
		list.add("cc");
		list.add("dd");
		list.add("ee");
		/*
		 * list中有一個成員變數:modCount:這個機構被修改的次數
		 * 迭代器內部:有個一變數:excepedModCount:被期望的修改次數
		 * 當集合在修改元素時:modCount	++;
		 * 當迭代器next()時,會判斷excepedModCount和modCount是否相等,不等會
		 * 引發異常
		 * chenckForComodification()
		 */
		for (String string : list)
		{
			if("aa".equals(string))
				//list的長度從5->4 迭代器的hasNext()==false, 不會執行next()
				//所以不會引發異常
				list.remove("bb");
			System.out.println(string);
		}
	}
}