我可以在集合上使用Iterator来获取Java中的元素吗?

时间:2017-09-18 15:57:02

标签: java arraylist collections iterator

我正在研究Collections并自动开始提问......

我在ArrayList上了解到,我可以在元素上使用方法add()remove();但现在我正在阅读另一种方法,就是使用对象Iterator及其方法。

那么我是否可以自由选择Iterator而非ArrayList的方法? 如果是,有利有弊吗?

我看了: 1)让Collection使用名为iterator()的方法向您提供Iterator。 Iterator已准备好返回序列中的第一个元素。 2)使用next()获取下一个对象序列; 3)查看序列中是否还有hasNext()的对象; 4)使用remove();

删除迭代器返回的最后一个元素

1 个答案:

答案 0 :(得分:3)

Iterator是一个相对较旧的构造,用于利用内部结构迭代元素(这比外部循环更优化)。

有时Iterator允许更多:

for (Car car : cars) {
    if (car.diesel) {
        cars.remove(car); // ERROR while looping cars one cannot alter it.
    }
}

for (Iterator<Car> iter = cars.iterator(); iter.hasNext(); ) {
    Car car = iter.next();
    if (car.diesel) {
        iter.remove(); // FINE
    }
}

for (int i = 0; i < cars.size(); ++i) {
    Car car = cars.get(i); // Could be slow for a LinkedList
    if (car.diesel) {
        cars.remove(i); // FINE
        --i; // So we do not skip the next, now at index i.
    }
}

java 8现在有,但这是另一种(非常好的)集合方法。