java - 为什么我们需要在 Java 中的 ArrayList 上使用迭代器?

标签 java arraylist iterator

我正在阅读问题中提到的答案 “Do we ever need to use Iterators on ArrayList?”。

在回答中,用户这样说:“使用 ArrayLists 的迭代器的一个重要用例是当您想要在迭代时删除元素”。

这甚至可以在 Java 中使用 ArrayList 的 remove 方法来实现。我的问题是为什么我们需要 ArrayList 中的迭代器?

考虑代码:

import java.util.*;
public class ocajp66 {
    public static void main(String[] args) {
        ArrayList a = new ArrayList();
        for (int i = 0; i < 10; i++) {
            a.add(i);
        }
        System.out.printf("BEFORE ITERATOR\n");
        for (int i = 0; i < a.size(); i++) {
            System.out.printf("I:%d\n", a.get(i));
        }
        System.out.printf("AFTER ITERATOR\n");
        Iterator i = a.iterator();
        while (i.hasNext()) {
            System.out.printf("I:%d\n", i.next());
        }
    }
}

谁能解释一下迭代器的意义?如果你能用代码解释我,那就太好了。

最佳答案

正如您所说,当您在迭代数组内容时想要删除内容时使用迭代器。如果您不使用迭代器,而只是有一个 for 循环并在其中使用 remove 方法,您将得到异常,因为在您迭代时数组的内容会发生变化。例如:你可能认为在 for 循环开始时数组大小是 10,但一旦你删除东西就不会这样了。所以当你到达最后一个循环时,可能会有 IndexOutofBoundsException 等。

关于java - 为什么我们需要在 Java 中的 ArrayList 上使用迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000282/

相关文章:

java - 打破自定义 block

java - 由于 "maven-metadata-bintray-central.xml"文件中的错误,Maven 构建失败

java - 如何在方法名称旁边放置另一个Java文件(或类)的名称?

java - 如何使用同名字符串引用类

iterator - 如何将实现特征的类型的迭代器的内容装箱?

javascript - 为什么 ES6 中的 Iterator.next() 方法不能直接返回值?

Java Hashmap Iterator 条件问题

javascript - Crypto.js SHA1 与 MessageDigest java SHA1 : why different results?

java - 策略异常 : None of the policy alternatives can be satisfied in WCF Service Call

java - 我希望数组中的偶数和奇数索引元素存储在单独的 ArrayList 中