#java #arraylist
#java #arraylist
Вопрос:
зачем использовать ‘iterator’ для выполнения цикла через ArrayList. Это можно сделать и без итератора, верно? итак, преимущества использования итератора для выполнения цикла через ArrayList
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
// Make a collection
ArrayList<String> cars = new ArrayList<String>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda");
// Get the iterator
//Iterator<String> it = cars.iterator();
// Looping without Iterator
for(int i=0;i<4;i ) {
//System.out.println(it.next());
System.out.println(cars.get(i));
}
}
}
Ответ №1:
Иногда вам просто не нужен индекс, так что это проще. Но попробуйте сделать это с помощью индексированного цикла for . Это можно сделать, но не так просто.
List<Integer> list = new ArrayList<>(
List.of(1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9, 10, 10));
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
// if even, remove it.
if (it.next() % 2 == 0) {
it.remove();
}
}
System.out.println(list);
С принтами
[1, 3, 5, 7, 9]
Использование an interator
позволяет изменять списки, которые в противном случае могли бы вызвать исключение одновременной модификации.
Кроме того, предположим, что у вас была реализация класса, которая генерировала простые числа или числа Фибоначчи. Вы могли бы сделать это, чтобы захватить их по отдельности.
Fibonacci fib = new Fibonacci(0, 1, 10);
for (long i : fib) {
System.out.print(i " ");
}
С принтами
0 1 1 2 3 5 8 13 21 34
Класс Фибоначчи
class Fibonacci implements Iterable<Long> {
public long start;
public long next;
public long count;
public Fibonacci(int start, int next, int count) {
this.start = start;
this.next = next;
this.count = count;
}
private class MyIterator implements Iterator<Long> {
int n = 0;
public boolean hasNext() {
return n < count;
}
public Long next() {
n ;
long ret = start;
start = start next;
next = ret;
return ret;
}
}
public Iterator<Long> iterator() {
return new MyIterator();
}
}
Реализуя Iterable
в классе, я могу использовать foreach
конструкцию для получения элементов класса.
Ответ №2:
Вероятно, вам не выгодно использовать его напрямую. Но итератор используется, например, forEach .
Комментарии:
1. я думал, что вопрос был «зачем использовать итератор?». Итак, то, что я написал, является ответом на это. Не комментарий. Возможно, я тогда неправильно понял вопрос.
Ответ №3:
Просто для выполнения цикла вам не нужен итератор, достаточно цикла for . Если вам нужно изменить список, то вам это нужно, чтобы избежать ConcurrentModificationException .