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

我可以在集合上使用迭代器来获取Java中的元素吗?,java,arraylist,collections,iterator,Java,Arraylist,Collections,Iterator,我正在研究收藏,一个问题自动开始 我了解到在ArrayList上,我可以在元素上使用add()和remove()方法;但是现在我读到另一种方法,它是使用对象迭代器及其方法 因此,我可以从Iterator而不是ArrayList自由选择方法吗? 如果是的话,有正反两方面的原因吗 我读到: 1) 请集合使用名为Iterator()的方法将迭代器交给您。该迭代器已准备好返回序列中的第一个元素。 2) 使用next()获取下一个对象序列; 3) 使用hasNext()查看序列中是否还有其他对象; 4)

我正在研究
收藏
,一个问题自动开始

我了解到在
ArrayList
上,我可以在元素上使用
add()
remove()
方法;但是现在我读到另一种方法,它是使用对象
迭代器
及其方法

因此,我可以从
Iterator
而不是
ArrayList
自由选择方法吗? 如果是的话,有正反两方面的原因吗

我读到: 1) 请集合使用名为
Iterator()
的方法将迭代器交给您。该迭代器已准备好返回序列中的第一个元素。 2) 使用
next()
获取下一个对象序列; 3) 使用
hasNext()
查看序列中是否还有其他对象;
4) 使用
Remove()
删除迭代器返回的最后一个元素

迭代器是一个相对古老的构造,它利用内部结构(比外部循环更优化)来迭代元素

有时迭代器允许更多:

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.
    }
}
用于(汽车:汽车){
如果(汽车柴油机){
cars.remove(car);//在循环cars时出错,不能更改它。
}
}
for(迭代器iter=cars.Iterator();iter.hasNext();){
Car=iter.next();
如果(汽车柴油机){
iter.remove();//很好
}
}
对于(int i=0;i

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

是的,你不能,我宁愿使用增强的
for
foreach
相当于C#)来添加或删除内容。@alfasin确定你可以使用迭代器将元素添加到列表中:你想做什么?请共享您现在拥有的代码。更新问题!那么,您确认我的话了吗?迭代器主要用于遍历集合。ListIterator更像列表上的光标。迭代器比for each(
for:
)的类型更多,但允许在循环内更改集合。所以只要有可能,我会为每一个都努力。不过,是的,你似乎已经掌握了这些机制。顺便说一下,Java8流可以完美地处理集合。