英文:
why to use 'iterator' to loop thru an ArrayList. It can be done without Iterator also right?
问题
为什么要使用 'iterator' 来遍历 ArrayList?也可以不使用 Iterator 来完成,对吗?
所以使用 Iterator 来遍历 ArrayList 的好处是什么?
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
// 创建一个集合
ArrayList<String> cars = new ArrayList<String>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("Mazda");
// 获取迭代器
// Iterator<String> it = cars.iterator();
// 在没有使用 Iterator 的情况下循环
for (int i = 0; i < 4; i++) {
//System.out.println(it.next());
System.out.println(cars.get(i));
}
}
}
英文:
why use 'iterator' to loop thru an ArrayList. It can be done without Iterator also right?
so the benefits of using iterator to loop thru an 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
得分: 1
有时候你只是不需要索引,这样会更简单。但是尝试使用带索引的循环来做这个。这是可以做到的,但不会那么简单。
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 (it.next() % 2 == 0) {
it.remove();
}
}
System.out.println(list);
打印结果
[1, 3, 5, 7, 9]
使用 Iterator
允许你修改可能会触发并发修改异常的列表。
另外,假设你有一个生成素数或斐波那契数的类实现。你可以这样单独获取它们。
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
Fibonacci 类
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
结构来获取类的元素。
英文:
Sometimes you just don't need the index so it is easier. But try doing this using an indexed for loop. It can be done, but not as easily.
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);
Prints
[1, 3, 5, 7, 9]
Using an interator
allows you to modify lists that might otherwise trigger a concurrent modification exception.
Also, assume you had a class implementation that generated primes or fibonacci numbers. You could do this to grab them individually.
Fibonacci fib = new Fibonacci(0, 1, 10);
for (long i : fib) {
System.out.print(i + " ");
}
Prints
0 1 1 2 3 5 8 13 21 34
The Fibonacci class
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();
}
}
By implementing Iterable
in the class I can use the foreach
construct to get elements of the class.
答案2
得分: 0
你可能没有直接使用它的好处。但是迭代器例如被 forEach 使用。
英文:
You probably don't have benefit of using it directly. But the iterator is used by for example the forEach.
答案3
得分: 0
只需循环遍历,不需要迭代器,for循环就足够了。如果需要修改列表,则需要使用迭代器以避免ConcurrentModificationException。
英文:
Just to loop through it you don't need an iterator, a for loop will suffice. If you need to modify the list then you need it to avoid ConcurrentModificationException.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论