Collection遍历方式

在 Java 中,Collection 接口是所有集合类的根接口,其遍历方式主要有以下几种:

1. 迭代器(Iterator)

通过 iterator() 方法获取迭代器,然后使用 hasNext()next() 方法遍历元素。特点:支持在遍历过程中删除元素(通过 remove() 方法)。

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionIterator {
    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);
            // 安全删除元素
            if (element.equals("Banana")) {
                iterator.remove();
            }
        }
    }
}

2. 增强型 for 循环(foreach)

通过 for-each 语法直接遍历集合元素。特点:语法简洁,但无法在遍历过程中删除元素(会抛出 ConcurrentModificationException)。

import java.util.ArrayList;
import java.util.Collection;

public class CollectionForEach {
    public static void main(String[] args) {
        Collection<Integer> collection = new ArrayList<>();
        collection.add(10);
        collection.add(20);
        collection.add(30);

        // 使用增强型 for 循环遍历
        for (Integer num : collection) {
            System.out.println(num);
        }
    }
}

3. Java 8 及以上:Stream API

通过 stream() 方法将集合转换为流,使用 forEach() 方法遍历元素。特点:支持函数式编程风格,可结合 Lambda 表达式。

import java.util.ArrayList;
import java.util.Collection;

public class CollectionStream {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("Java");
        collection.add("Python");
        collection.add("C++");

        // 使用 Stream 和 Lambda 遍历
        collection.stream().forEach(element -> {
            System.out.println(element);
        });
    }
}

4. 传统 for 循环(仅适用于 List)

通过索引遍历集合元素,仅适用于实现 RandomAccess 接口的集合(如 ArrayList)。特点:效率较高,但代码冗余,且无法直接用于 Set 等无序集合。

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class CollectionForLoop {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("One");
        list.add("Two");
        list.add("Three");

        // 使用传统 for 循环遍历 List
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

总结对比

迭代器

通用遍历,需删除元素时使用

安全删除元素

代码稍复杂

增强型 for

简单遍历,无需修改元素时使用

语法简洁

无法删除元素

Stream API

函数式编程或并行处理

支持 Lambda 和并行流

需 Java 8+

传统 for

高效遍历有序集合(如 ArrayList)

直接通过索引访问,效率高

仅适用于 List,代码冗余

示例扩展:斗地主游戏中的遍历

在之前的斗地主游戏代码中,可以通过以下方式遍历玩家手牌:

// 遍历玩家手牌(使用增强型 for)
for (List<Poker> hand : players) {
    System.out.println("手牌:" + hand);
}

// 遍历手牌并打印(使用迭代器)
for (List<Poker> hand : players) {
    Iterator<Poker> iterator = hand.iterator();
    while (iterator.hasNext()) {
        Poker poker = iterator.next();
        System.out.print(poker + " ");
    }
    System.out.println();
}

根据具体需求选择合适的遍历方式即可。

Java集合框架 文章被收录于专栏

Java集合框架是Java提供的一组用于存储和操作数据的类和接口,它位于java.util包中,为开发者提供了强大且灵活的数据存储和处理能力。以下将从整体架构、主要接口、常用实现类、使用场景以及示例代码等方面详细介绍Java集合框架。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务