iterator迭代器詳解 什么是迭代器iterator?
什么是迭代器iterator?迭代器(Iterator)迭代器是一種設計模式,它是一個對象,它可以遍歷并選擇序列中的對象,而開發(fā)人員不需要了解該序列的底層結(jié)構(gòu)。迭代器通常被稱為“輕量級”對象,因為創(chuàng)建
什么是迭代器iterator?
迭代器(Iterator)
迭代器是一種設計模式,它是一個對象,它可以遍歷并選擇序列中的對象,而開發(fā)人員不需要了解該序列的底層結(jié)構(gòu)。
迭代器通常被稱為“輕量級”對象,因為創(chuàng)建它的代價小。Java中的Iterator功能比較簡單,并且只能單向移動:
(1) 使用方法iterator()要求容器返回一個Iterator。第一次調(diào)用Iterator的next()方法時,它返回序列的第一個元素。
注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。
(2) 使用next()獲得序列中的下一個元素。
(3) 使用hasNext()檢查序列中是否還有元素。
(4) 使用remove()將迭代器新返回的元素刪除。
Iterator是Java迭代器最簡單的實現(xiàn),為List設計的ListIterator具有更多的功能,它可以從兩個方向遍歷List,也可以從List中插入和刪除元素。
java中foreach和迭代器在遍歷List集合,一些情況下為什么能使用集合自動的刪除方法刪除元素?
你a<70的時候是倒數(shù)第二位,也就是66,沒有拋出異常是因為之前l(fā)ist大小為5,你刪除66后,list大小為4,你第一次遍歷list大小為5的數(shù)組的時候,66的cursor在index = 4,當你刪除后,遍歷list大小為4的數(shù)組時, cursor = 4 = newlist.size()。
ArrayList里的這個方法就會判斷l(xiāng)ist已經(jīng)讀取完畢了,所以不會拋出異常。
1
2
3
public boolean hasNext() {
return cursor != size
}
a < 90的時候在第二位就發(fā)生了變化,list的大小也發(fā)生了變化
看了下ArrayList的源碼,每次循環(huán)的時候都會call這個方法檢查list的大小是否發(fā)生了變化,但是這個方法是發(fā)生在hasNext方法之后的
1
2
3
4
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException()
}