我正在研究Collections
并自动开始提问......
我在ArrayList
上了解到,我可以在元素上使用方法add()
和remove()
;但现在我正在阅读另一种方法,就是使用对象Iterator
及其方法。
那么我是否可以自由选择Iterator
而非ArrayList
的方法?
如果是,有利有弊吗?
我看了:
1)让Collection使用名为iterator()
的方法向您提供Iterator。 Iterator已准备好返回序列中的第一个元素。
2)使用next()
获取下一个对象序列;
3)查看序列中是否还有hasNext()
的对象;
4)使用remove()
;
答案 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现在有流,但这是另一种(非常好的)集合方法。