程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • JavaAPI速查

    • Java基础API
    • String类常用API
    • StringBuilder常用API
    • Arrays数组 工具类
    • Collections 工具类
    • Java 集合常用API
    • Collection 接口集合的遍历方式
      • 1. 增强型 for 循环 (Enhanced for loop)
      • 2. 使用 Iterator 遍历集合
      • 3. 使用 ListIterator 遍历 List(双向遍历)
      • 4. 使用 forEach 和 Lambda 表达式
      • 5. 使用 Stream API 遍历集合
      • 6. 使用传统 for 循环(适用于 List)
      • 7. Collection 接口集合的遍历总结
    • Map 接口集合的遍历方式
    • Queue 和 Stack 的常用遍历方式
    • 数组的常用遍历方式
    • 字符串的常用遍历方式
    • 文件或目录的常用遍历方式
    • 比较器的常用使用方式
    • 常用日期和时间API
  • JavaAPI速查
  • JavaAPI速查
scholar
2024-08-24
目录

Collection 接口集合的遍历方式

# Collection 接口集合的遍历方式

image-20240824030501318

# 1. 增强型 for 循环 (Enhanced for loop)

使用说明:

  • 适用集合: 适用于所有实现了 Iterable 接口的集合,如 List、Set、Queue 等。
  • 不适用集合: 不适用于 Map(因为 Map 没有实现 Iterable 接口)。
  • 使用前提: 集合必须实现 Iterable 接口。
  • 注意事项: 只能用于读取操作,无法在遍历中修改集合元素(如增删元素)。

代码示例:

import java.util.Arrays;
import java.util.List;

public class EnhancedForLoopExample {
    public static void main(String[] args) {
        // 创建一个List集合,存储字符串元素
        List<String> stringList = Arrays.asList("Java", "Python", "C++");

        // 使用增强型for循环遍历集合
        for (String item : stringList) {
            // 输出每一个元素
            System.out.println(item);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

参数说明:

  • String item: 集合中每个元素在遍历时都会赋值给 item,类型需与集合元素类型一致。

# 2. 使用 Iterator 遍历集合

使用说明:

  • 适用集合: 适用于所有实现了 Iterable 接口的集合,如 List、Set、Queue 等。
  • 不适用集合: 不适用于 Map(需要通过 entrySet()、keySet() 或 values() 获取集合后再遍历)。
  • 使用前提: 集合必须实现 Iterable 接口。
  • 注意事项: 可以在遍历中删除元素,避免使用集合的 remove() 方法,而应使用 Iterator 提供的 remove() 方法以避免 ConcurrentModificationException。

代码示例:

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class IteratorExample {
    public static void main(String[] args) {
        // 创建一个List集合,存储字符串元素
        List<String> stringList = Arrays.asList("Java", "Python", "C++");

        // 获取集合的迭代器
        Iterator<String> iterator = stringList.iterator();

        // 使用 while 循环进行遍历
        while (iterator.hasNext()) {
            // 获取当前元素
            String item = iterator.next();

            // 输出元素
            System.out.println(item);

            // 示例:可以在遍历过程中删除元素(此操作不会抛出ConcurrentModificationException)
            // iterator.remove();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

参数说明:

  • iterator.hasNext():判断集合中是否还有未遍历的元素,返回 boolean 类型。
  • iterator.next():返回下一个元素,并将迭代指针向前移动。
  • iterator.remove():删除当前迭代的元素。

# 3. 使用 ListIterator 遍历 List(双向遍历)

使用说明:

  • 适用集合: 仅适用于 List 集合,如 ArrayList、LinkedList。
  • 不适用集合: 不适用于 Set、Queue、Map。
  • 使用前提: 必须是实现了 List 接口的集合。
  • 注意事项: ListIterator 支持双向遍历和在遍历中修改元素,适用于需要在遍历过程中进行动态修改的场景。

代码示例:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorExample {
    public static void main(String[] args) {
        // 创建一个ArrayList集合,存储字符串元素
        List<String> stringList = new ArrayList<>(Arrays.asList("Java", "Python", "C++"));

        // 获取ListIterator对象
        ListIterator<String> listIterator = stringList.listIterator();

        // 从前向后遍历
        System.out.println("从前向后遍历:");
        while (listIterator.hasNext()) {
            // 获取当前元素
            String item = listIterator.next();
            System.out.println(item);

            // 修改元素:如果元素是 "Java",将其修改为 "Java SE"
            if (item.equals("Java")) {
                listIterator.set("Java SE");
            }
        }

        // 从后向前遍历
        System.out.println("从后向前遍历:");
        while (listIterator.hasPrevious()) {
            // 获取当前元素
            String item = listIterator.previous();
            System.out.println(item);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

参数说明:

  • listIterator.hasNext():判断是否有下一个元素。
  • listIterator.hasPrevious():判断是否有上一个元素。
  • listIterator.next():返回下一个元素并将指针向前移动。
  • listIterator.previous():返回上一个元素并将指针向后移动。
  • listIterator.set(E e):修改当前元素,E 为新元素。

# 4. 使用 forEach 和 Lambda 表达式

使用说明:

  • 适用集合: 适用于所有实现了 Iterable 接口的集合,如 List、Set、Queue,以及通过 entrySet()、keySet()、values() 获取的 Map 集合。
  • 不适用集合: 没有不适用的集合,只要实现了 Iterable。
  • 使用前提: 集合必须实现 Iterable 接口,并且支持 Lambda 表达式的使用(Java 8 及以上版本)。
  • 注意事项: 不适合在遍历过程中进行集合的修改(如增删元素),适用于只读操作。

代码示例:

import java.util.Arrays;
import java.util.List;

public class ForEachLambdaExample {
    public static void main(String[] args) {
        // 创建一个List集合,存储字符串元素
        List<String> stringList = Arrays.asList("Java", "Python", "C++");

        // 使用forEach方法和Lambda表达式遍历集合
        stringList.forEach(item -> {
            // 输出每一个元素
            System.out.println(item);
        });
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

参数说明:

  • forEach(Consumer<? super T> action):action 是一个 Consumer 函数式接口,用于处理每个元素。
  • item: 每次遍历时当前处理的元素。

# 5. 使用 Stream API 遍历集合

使用说明:

  • 适用集合: 适用于所有实现了 Collection 接口的集合,如 List、Set、Queue,以及通过 entrySet()、keySet()、values() 获取的 Map 集合。
  • 不适用集合: 没有不适用的集合,只要实现了 Collection。
  • 使用前提: 集合必须实现 Collection 接口,并且支持 Lambda 表达式(Java 8 及以上版本)。
  • 注意事项: Stream 适用于大规模数据处理,支持并行流(parallelStream()),性能优越。

代码示例:

import java.util.Arrays;
import java.util.List;

public class StreamApiExample {
    public static void main(String[] args) {
        // 创建一个List集合,存储字符串元素
        List<String> stringList = Arrays.asList("Java", "Python", "C++");

        // 使用Stream API遍历集合
        stringList.stream().forEach(item -> {
            // 输出每一个元素
            System.out.println(item);
        });
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

参数说明:

  • stream():返回集合的顺序流。
  • forEach(Consumer<? super T> action):对 Stream 中的每个元素执行操作。

# 6. 使用传统 for 循环(适用于 List)

使用说明:

  • 适用集合: 适用于 List 集合,如 ArrayList、LinkedList,尤其适合需要基于索引操作的场景。
  • 不适用集合: 不适用于 Set、Queue、Map,这些集合不支持通过索引访问。
  • 使用前提: 集合必须实现 List 接口,且需要通过索引访问元素。
  • 注意事项: 传统 for 循环适合需要对集合进行索引操作或复杂逻辑处理的场景。

代码示例:

import java.util.Arrays;
import java.util.List;

public class TraditionalForLoopExample {
    public static void main(String[] args) {
        // 创建一个List集合,存储字符串元素
        List<String> stringList = Arrays.asList("Java", "Python", "C++");

        // 使用传统的for循环遍历集合
        for (int i = 0; i < stringList.size(); i++) {
            // 通过索引获取当前元素
            String item = stringList.get(i);
            System.out.println(item);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

参数说明:

  • int i:循环变量,用于访问集合中的索引。
  • stringList.get(i):根据索引获取集合中的元素。

# 7. Collection 接口集合的遍历总结

  • 增强型 for 循环和 Iterator 是最常用的遍历方式,适用于大部分集合类型。
  • ListIterator 仅适用于 List 集合,且支持双向遍历和修改操作。
  • forEach 和 Stream 提供了更简洁的语法,适用于现代化代码风格,尤其适合只读操作。
  • 传统 for 循环适合需要精确控制遍历过程和索引操作的场景。
编辑此页 (opens new window)
上次更新: 2025/01/01, 12:41:26
Java 集合常用API
Map 接口集合的遍历方式

← Java 集合常用API Map 接口集合的遍历方式→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式