Java Collection - 迭代器 Iterator 怎么使用?有什么特點?


迭代器 Iterator 是什么?

Java容器的頂部接口就是Iterator。是一個可以遍歷集合的對象,為各種容器提供了公共的操作接口,隔離對容器的遍歷操作和底層實現,從而解耦。

  1. java迭代器查找的唯一操作就是依靠調用next,而在執行查找任務的同時,迭代器的位置也在改變.
  2. 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集合詳解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM