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集合框架。