迭代器 Iterator 是什么?
Java容器的頂部接口就是Iterator。是一個可以遍歷集合的對象,為各種容器提供了公共的操作接口,隔離對容器的遍歷操作和底層實現,從而解耦。
- java迭代器查找的唯一操作就是依靠調用next,而在執行查找任務的同時,迭代器的位置也在改變.
- Iterator迭代器remove方法會刪除上次調用next方法返回的元素.這也意味之remove方法和next有着很強的依賴性.如果在 調用remove之前沒有調用next是不合法的 .這個接口衍生出了,java集合的迭代器.java集合的迭代器使用
{
boolean hasNext() //如果仍有元素可以迭代,則返回 true。
E next() //返回迭代的下一個元素。
void remove() //刪除
default void forEach //實現了迭代器接口的類才可以使用forEach
}
查看最新圖片,請點擊:https://www.processon.com/apps/58bd73cfe4b0f944a6660f38

迭代器 Iterator 怎么使用?
易錯點:Iterator調用remove之前沒有調用next是不合法的
class test {
public static void run() {
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(3);
//依靠這個方法生成一個java集合迭代器<--在Colletion接口中的方法,被所有集合實現.
Iterator<Integer> iterator = list.iterator();
// iterator.remove();報錯java.lang.IllegalStateException
iterator.next();
iterator.remove();//不報錯,刪掉了1
System.out.println(list);//AbstractCollection類中實現的toString讓list可以直接被打印出來
while (iterator.hasNext()) {//迭代器,hasNext()集合是否為空
Integer a = iterator.next();//可以用next訪問每一個元素
System.out.println(a);//2,3,3
}
for (int a : list) {//也可以使用foreach
System.out.println(a);//2,3,3
}
}
public static void main(String[] args) {
run();
}
}
當然你也會有點好奇,為什么 remove 方法前面必須跟着一個next方法.其實這個只能這么解釋.
迭代器的next方法的運行方式並不是類似於數組的運行方式.

當然,這張圖主要是讓你理解一下.
數組的指針指向要操作的元素上面,而迭代器卻是將要操作的元素放在運動軌跡中間.
本質來講,迭代器的指針並不是指在元素上,而是指在元素和元素中間.
假設現在調用remove().被刪除的就是2號元素.(被迭代器那個圓弧籠蓋在其中的那個元素).如果再次調用,就會報錯,因為圓弧之中的2號元素已經消失,那里是空的,無法刪除.
參考
不眠不休不寫bug:java集合詳解
