在Java里,集合遍历是常见操作,不同类型的集合有多种遍历方式。下面为你详细介绍常见的遍历方式、适用场景及优缺点。
1. for
循环(适用于 List
)
import java.util.ArrayList;
import java.util.List;
public class ForLoopExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
- 优点:可以按索引访问元素,便于随机访问和修改元素。
- 缺点:代码相对冗长,不适合遍历非
List
集合。
2. 增强 for
循环(适用于 Collection
)
import java.util.ArrayList;
import java.util.Collection;
public class EnhancedForLoopExample {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("apple");
collection.add("banana");
collection.add("cherry");
for (String element : collection) {
System.out.println(element);
}
}
}
- 优点:代码简洁,适用于所有实现了
Iterable
接口的集合。 - 缺点:无法获取当前元素的索引,不能在遍历过程中修改集合(会抛出
ConcurrentModificationException
)。
3. Iterator
迭代器(适用于 Collection
)
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorExample {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("apple");
collection.add("banana");
collection.add("cherry");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
}
}
- 优点:可以在遍历过程中安全地删除元素,适用于所有实现了
Collection
接口的集合。 - 缺点:代码相对复杂,只能单向遍历。
4. ListIterator
迭代器(仅适用于 List
)
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
}
// 反向遍历
while (listIterator.hasPrevious()) {
System.out.println(listIterator.previous());
}
}
}
- 优点:可以双向遍历
List
,在遍历过程中安全地添加、删除和修改元素。 - 缺点:仅适用于
List
集合,代码相对复杂。
5. Java 8 Stream API(适用于 Collection
)
import java.util.ArrayList;
import java.util.Collection;
public class StreamApiExample {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("apple");
collection.add("banana");
collection.add("cherry");
collection.stream().forEach(System.out::println);
}
}
- 优点:代码简洁,支持并行处理,可与 Lambda 表达式结合使用,增强代码可读性。
- 缺点:有一定学习成本,不适合简单的遍历场景。
综上所述,你可以依据具体需求和集合类型选择合适的遍历方式。