Java 容器 --- 集合遍历的四种方式(传统循环/迭代器/增强for/forEach)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Java 容器 --- 集合遍历的四种方式(传统循环/迭代器/增强for/forEach)

集合遍历的四种方式?



创建一个List集合:

public static void main(String[] args) {
    List<String> listNames = new ArrayList<>();
    listNames.add("qiuqiu");
    listNames.add("kaka");
    listNames.add("beibei");
    listNames.add("hutu");
    listNames.add("wangzai");
}


这个list包含我们小区的所有小狗的名字。注意在语句的右边<>的使用

ArrayList<>();


这个语法从Java7开始使用,允许我们以一种更严谨的方式声明泛型的集合,因为编译器可以从左边推测出右边的参数类型(因此叫做“类型引用”)


经典for循环


这种迭代方法在编程中非常熟悉,其中计数器变量从集合中的第一个元素运行到最后一个元素

for (int i = 0; i < listNames.size(); i++) {
    String name = listNames.get(i);
    System.out.println(name);
}


pros:


  • 这是编程中最熟悉的构造
  • 如果我们需要访问并使用计数器变量,比如打印小狗狗们的的数字顺序:1,2,3……


cons:


  • 使用计数器变量要求集合必须以基于索引的形式(如ArrayList)存储元素,并且我们必须提前知道集合的大小


迭代的方式


由于经典循环方式的限制,创建了使用迭代器的方式,这种方式允许我们迭代各种集合。


因此你可以看到Collection接口定义了每个集合必须实现iterator()方法,需要先创建迭代器对象。


在List上用迭代器遍历:

Iterator<String> itr = listNames.iterator();
while (itr.hasNext()) {
    String name = itr.next();
    System.out.println(name);
}


在Set上用迭代器遍历:

Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");
Iterator<String> itr = set.iterator();
while (itr.hasNext()) {
    String letter = itr.next();
    System.out.println(letter);
}


在Map上用迭代器遍历(迭代keySet()):

Map<String, Integer> grade = new HashMap<>();
grade.put("Operating System", 90);
grade.put("Computer Network", 92);
grade.put("Software Engineering", 90);
grade.put("Oracle", 90);
Iterator<String> itr = grade.keySet().iterator();
while (itr.hasNext()) {
    String key = itr.next();
    Integer value = grade.get(key);
    System.out.println(key + "=>" + value);
}


加强for循环


从Java 5开始,程序员可以使用一种更简洁的语法来遍历集合-加强for循环。

for (String s : listNames) {
    System.out.println(s);
}


注意:加强for循环实际上在背后使用的是迭代器。这意味着编译时Java编译器会将增强型for循环语法转换为迭代器构造。 新的语法为程序员提供了一种更方便的迭代集合的方式。


使用Lambda表达式的forEach


Java 8引入了Lambda表达式,介绍了一种遍历集合的全新方式-forEach方法

listNames.forEach(name -> System.out.println(name));


forEach方法与之前的方法最大的区别是什么?


在之前的方法中(经典for循环,迭代器和加强for循环),程序员可以控制集合是如何迭代的。迭代代码不是集合本身的一部分,它是由程序员编写的,因此称为外部迭代。


相比之下,新方法将迭代代码封装在集合本身中,因此程序员不必为迭代集合编写代码。 相反,程序员会在每次迭代中指定要做什么 - 这是最大的区别!


因此术语forEach内部迭代:集合处理迭代本身,而程序员传递动作 - 即每次迭代需要做的事情。

相关文章
|
12天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
31 6
|
12天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
30 3
|
12天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
24 2
|
14天前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
25 3
|
7天前
|
算法 Java 测试技术
🧑‍💻Java零基础:Java 的循环退出语句 break
【10月更文挑战第16天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
25 6
|
9天前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
37 5
|
10天前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
35 3
|
12天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
【10月更文挑战第16天】Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。通过 hashCode() 和 equals() 方法实现唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 添加和遍历元素,体现了 Set 的高效性和简洁性。
21 4
|
14天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。它通过 hashCode() 和 equals() 方法确保元素唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 实现这一特性。
21 5
|
12天前
|
Java 开发者
在Java集合世界中,Set以其独特的特性脱颖而出,专门应对重复元素
在Java集合世界中,Set以其独特的特性脱颖而出,专门应对重复元素。通过哈希表和红黑树两种模式,Set能够高效地识别并拒绝重复元素的入侵,确保集合的纯净。无论是HashSet还是TreeSet,都能在不同的场景下发挥出色的表现,成为开发者手中的利器。
23 2

热门文章

最新文章