Java Iterator 詳解

Iterator 是 java.utils 包下定義的迭代器接口。在開發中,我們用它來遍歷集合,從而實現訪問相應數據以及刪除相應數據的目的。

常用方法

  1. boolean hasNext():當迭代器對象中有剩餘元素可以訪問時,返回 true;
  2. bject next():當 hasNext() 方法返回 true 時,它返回集合中的下一個元素。當沒有下一個元素時,此方法會拋出 NoSuchElementException。
  3. void remove():此方法將刪除集合中的被選中元素,若此時沒有元素被選中,則拋出 IllegalStateException。

示例

遍歷集合

代碼:

public class IteratorTest {
    @Test
    public void test() {
        Collection c = new ArrayList();
        c.add(123);
        c.add(456);
        c.add(789);
        // 調用 iterator() 得到一個新的迭代器對象
        Iterator iterator = c.iterator();
        // hasNext() 的作用相當於判斷是否還有下一個元素
        while (iterator.hasNext()) {
            // 指針下移,並將下移後指針所指的集合中的元素返回
            System.out.println(iterator.next());
        }
    }
}

輸出:

123
456
789

刪除元素

public class IteratorTest {
 	@Test
    public void test1() {
        Collection c1 = new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");

        // 調用 iterator() 得到一個新的迭代器對象
        Iterator iterator1 = c1.iterator();
        // hasNext() 的作用相當於判斷是否還有下一個元素
        while (iterator1.hasNext()) {
            // 指針下移,並將下移後指針所指的集合中的元素返回
            System.out.println(iterator1.next());
        }

        //刪除集合中"c"
        iterator1 = c1.iterator();
        while (iterator1.hasNext()){
            Object obj = iterator1.next();
            if("c".equals(obj)){
                iterator1.remove();
            }
        }
        System.out.println("以下爲刪除元素 c 後的結果");
        //遍歷集合
        iterator1 = c1.iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
        }
        System.out.println("以下爲刪除所有元素結果");
        //遍歷集合
        iterator1 = c1.iterator();
        while (iterator1.hasNext()){
            // 若沒下一行代碼,則會報 IllegalStateException。此時指針位置指向第一個元素之前
            iterator1.next();
            iterator1.remove();
        }
    }
}

輸出:

a
b
c
以下爲刪除元素 c 後的結果
a
b
以下爲刪除所有元素結果

我們不難得出以下結論:
當我們創建了一個 Iterator 對象後,默認的遊標位置在集合的第一個元素之前,next() 作用是將指針位置下移一位。

如果不是上述結論,輸出結果不會有 123,以及刪除所有元素時也不會報 IllegalStateException。

配圖:
iterator

注意

  1. 集合對象每次調用 iterator() 方法都得到一個全新的迭代器對象;
  2. 如果還未調用 next() 或在上一次調用 next() 方法之後已經調用了 remove() 方法,再調用 remove() 都會報 IllegalStateException;
  3. 使用 remove() 方法時,用的是 Iterator 的 remove() 方法,而不是集合的 remove() 方法。

推薦閱讀

iterator in java
how to use iterator in java

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章