java中foreach和迭代器在遍歷List集合?
你a<70的時(shí)候是倒數(shù)第二位,也就是66,沒有拋出異常是因?yàn)橹發(fā)ist大小為5,你刪除66后,list大小為4,你第一次遍歷list大小為5的數(shù)組的時(shí)候,66的cursor在index = 4,當(dāng)你刪除后,遍歷list大小為4的數(shù)組時(shí), cursor = 4 = newlist.size()。
ArrayList里的這個(gè)方法就會(huì)判斷l(xiāng)ist已經(jīng)讀取完畢了,所以不會(huì)拋出異常。
1
2
3
public boolean hasNext() {
return cursor != size;
}
a < 90的時(shí)候在第二位就發(fā)生了變化,list的大小也發(fā)生了變化
看了下ArrayList的源碼,每次循環(huán)的時(shí)候都會(huì)call這個(gè)方法檢查list的大小是否發(fā)生了變化,但是這個(gè)方法是發(fā)生在hasNext方法之后的
1
2
3
4
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}