Java案例如何遍历集合数据?

wen java案例 12

本文目录导读:

Java案例如何遍历集合数据?

  1. 增强for循环(最常用)
  2. 传统for循环(适用于List)
  3. 迭代器(Iterator)- 适合删除元素
  4. Java 8+ forEach(Lambda表达式)
  5. Stream API(Java 8+)
  6. 不同类型集合的遍历示例
  7. 性能对比与选择建议
  8. 实际案例
  9. 最佳实践建议

在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);
        });
    }
}

最佳实践建议

  1. 简单遍历:使用增强for循环或forEach
  2. 需要索引:使用传统for循环
  3. 需要删除元素:使用Iterator
  4. 复杂数据转换:使用Stream API
  5. 处理大量数据:考虑并行流 parallelStream()

选择哪种方式主要取决于你的具体需求和代码的可读性要求。

抱歉,评论功能暂时关闭!