本文目录导读:

- 增强for循环(最常用)
- 传统for循环(适用于List)
- 迭代器(Iterator)- 适合删除元素
- Java 8+ forEach(Lambda表达式)
- Stream API(Java 8+)
- 不同类型集合的遍历示例
- 性能对比与选择建议
- 实际案例
- 最佳实践建议
在Java中遍历集合数据有多种方式,以下是几种常用的遍历方法及其适用场景:
增强for循环(最常用)
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
// 增强for循环
for (String item : list) {
System.out.println(item);
}
传统for循环(适用于List)
// 传统for循环(适用于有索引的集合)
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
迭代器(Iterator)- 适合删除元素
// 使用Iterator遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item.equals("Python")) {
iterator.remove(); // 安全删除元素
}
System.out.println(item);
}
Java 8+ forEach(Lambda表达式)
// Lambda表达式遍历 list.forEach(item -> System.out.println(item)); // 方法引用 list.forEach(System.out::println);
Stream API(Java 8+)
// Stream API遍历
list.stream()
.filter(item -> item.length() > 3)
.forEach(System.out::println);
// 并行处理
list.parallelStream()
.forEach(System.out::println);
不同类型集合的遍历示例
List遍历
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 推荐:增强for循环
for (String s : list) {
System.out.println(s);
}
Set遍历
Set<String> set = new HashSet<>();
set.add("X");
set.add("Y");
set.add("Z");
// Set没有索引,只能用增强for或迭代器
for (String s : set) {
System.out.println(s);
}
Map遍历
Map<String, Integer> map = new HashMap<>();
map.put("John", 25);
map.put("Alice", 30);
map.put("Bob", 28);
// 遍历键值对
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
// 只遍历键
for (String key : map.keySet()) {
System.out.println(key);
}
// 只遍历值
for (Integer value : map.values()) {
System.out.println(value);
}
性能对比与选择建议
| 遍历方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 增强for循环 | 通用遍历 | 简洁、安全 | 不能获取索引 |
| 传统for循环 | List遍历 | 可操作索引 | 对Set等不适用 |
| Iterator | 需要删除元素 | 支持删除操作 | 代码稍繁琐 |
| forEach(λ) | Java 8+ | 简洁、函数式 | 不支持break/continue |
| Stream API | 复杂数据处理 | 链式操作、并行处理 | 性能开销较大 |
实际案例
public class CollectionTraversalDemo {
public static void main(String[] args) {
// 学生成绩集合
Map<String, List<Integer>> studentGrades = new HashMap<>();
studentGrades.put("张三", Arrays.asList(85, 90, 78));
studentGrades.put("李四", Arrays.asList(92, 88, 95));
studentGrades.put("王五", Arrays.asList(76, 82, 80));
// 使用forEach遍历所有学生成绩
studentGrades.forEach((name, grades) -> {
int total = grades.stream().mapToInt(Integer::intValue).sum();
double avg = total / (double) grades.size();
System.out.printf("%s: 总分%d, 平均分%.1f%n", name, total, avg);
});
}
}
最佳实践建议
- 简单遍历:使用增强for循环或forEach
- 需要索引:使用传统for循环
- 需要删除元素:使用Iterator
- 复杂数据转换:使用Stream API
- 处理大量数据:考虑并行流 parallelStream()
选择哪种方式主要取决于你的具体需求和代码的可读性要求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播