Java Collection集合的三种遍历方式详解

 更新时间:2022年11月29日 10:32:50   作者:蓝桉cyq  
Collection集合遍历的方式有三种,迭代器foreach/增强for循环lambda表达式,这篇文章主要介绍了Java Collection集合的三种遍历方式,需要的朋友可以参考下

Collection遍历方式

Collection集合遍历的方式有三种:

迭代器foreach/增强for循环lambda表达式

迭代器遍历

迭代器概述:

遍历就是一个一个的把容器中的元素访问一遍。

迭代器在Java中是Iterator代表的,迭代器是集合的专用遍历方式。

Collection集合获取迭代器的方:

方法名称说明
iterator()返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引
// 创建迭代器对象
Iterator ite = list.iterator();

Iterator中的常用方法:

方法名称说明
hasNext()询问当前位置是否有元素存在,存在返回true ,不存在返回false
next()获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。

next方法获取元素

public static void main(String[] args) {
    // 创建String类型的集合
    Collection<String> list = new ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");

    // 创建迭代器对象
    Iterator ite = list.iterator();
    // 通过next取出元素
    System.out.println(ite.next()); // aaa
    System.out.println(ite.next()); // bbb
    System.out.println(ite.next()); // aaa
    // System.out.println(ite.next()); // 注意不要越界, 越界则报错
}

hasNext方法会判断当前位置是否有元素, 我们可以使用hasNext方法作为While循环的条件, 实现自动遍历元素

public static void main(String[] args) {
    // 创建String类型的集合
    Collection<String> list = new ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");

    // 创建迭代器对象
    Iterator ite = list.iterator();
  
    // hasNext作为条件
    while (ite.hasNext()) {
        System.out.println(ite.next());
    }
}

小结:

迭代器的默认位置在哪里。

Iterator<E> iterator():得到迭代器对象,默认指向当前集合的索引0的位置

迭代器如果取元素越界会出现什么问题。

会出现NoSuchElementException异常。

foreach遍历

foreach循环也称增强for循环:

既可以遍历集合也可以遍历数组

它是JDK5之后出现的, 其内部原理是一个Iterator迭代器, 遍历集合时, 相当于是迭代器的简化写法

实现Iterable接口的类才可以使用迭代器和增强for, Collection接口已经实现了Iterable接口

for(元素数据类型 变量名 : 数组或者Collection集合) {
    //在此处使用定义的变量即可,该变量就是元素
}

演示代码:

public static void main(String[] args) {
    // 创建String类型的集合
    Collection<String> list = new ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");
    // 创建int类型的数组
    int[] arr = {10, 20, 80, 40};

    // foreach遍历集合
    for (String item : list) {
        System.out.println(item);
    }
    // foreach遍历数组
    for (int item : arr) {
        System.out.println(item);
      	// item = 100; // 注意此处修改变量item的值不会影响数组的值, 该操作无意义
    }
}

小结: 增强for可以遍历哪些容器?

既可以遍历集合也可以遍历数组。

Lambda遍历

Lambda表达式遍历集合:

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

Collection结合Lambda遍历的API:

方法名称说明
forEach(Consumer<? super T> action):结合lambda遍历集合

通过foreach方法遍历集合, foreach方法要求传入一个Consumer接口类型的变量, 且该接口是一个函数式接口

演示代码:

通过foreach方法遍历

public static void main(String[] args) {
    // 创建String类型的集合
    Collection<String> list = new ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");

    // 通过foreach方法遍历
    list.forEach(new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    });
}

通过foreach方法结合Lambda表达式进行遍历

public static void main(String[] args) {
    // 创建String类型的集合
    Collection<String> list = new ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");

    // foreach方法结合Lambda表达式
    list.forEach(s -> System.out.println(s));
}

到此这篇关于Java Collection集合的三种遍历方式的文章就介绍到这了,更多相关Java Collection集合遍历内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Java中对域和静态方法的访问不具有多态性(实例讲解)

    基于Java中对域和静态方法的访问不具有多态性(实例讲解)

    下面小编就为大家带来一篇基于Java中对域和静态方法的访问不具有多态性(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 使用MyBatis查询千万级数据量操作实现

    使用MyBatis查询千万级数据量操作实现

    这篇文章主要为大家介绍了如何使用MyBatis 查询千万数据量的操作过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)

    Java开发环境jdk 1.8安装配置方法(Win7 64位系统/windows server 2008)

    这篇文章主要介绍了Java开发环境配置方法(Win7 64位系统/windows server 2008),需要的朋友可以参考下
    2016-10-10
  • Java使用正则表达式验证手机号和电话号码的方法

    Java使用正则表达式验证手机号和电话号码的方法

    今天小编就为大家分享一篇关于Java使用正则表达式验证手机号和电话号码的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Springboot详解如何整合使用Thymeleaf

    Springboot详解如何整合使用Thymeleaf

    这篇文章主要分享了Spring Boot整合使用Thymeleaf,Thymeleaf是新一代的Java模板引擎,类似于Velocity、FreeMarker等传统引擎,关于其更多相关内容,需要的小伙伴可以参考一下
    2022-06-06
  • Java那点事——StringBuffer与StringBuilder原理与区别

    Java那点事——StringBuffer与StringBuilder原理与区别

    本文给大家分享StringBuffer与StringBuilder的区别,它们的应用场景是什么?非常不错,面试考官经常考的一个问题,有需要的朋友跟着脚本之家小编一起学习吧
    2016-06-06
  • MyBatisPlus中事务处理的实现

    MyBatisPlus中事务处理的实现

    本文主要介绍了MyBatisPlus中事务处理的实现,包括事务的开启、提交、回滚等操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Java+Swing实现中国象棋游戏

    Java+Swing实现中国象棋游戏

    这篇文章将通过Java+Swing实现经典的中国象棋游戏。文中可以实现开始游戏,悔棋,退出等功能。感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-02-02
  • Java中序列化和反序列化的完整讲解

    Java中序列化和反序列化的完整讲解

    序列化是将对象转换成二进制字节流的过程;反序列化是从二进制字节流中恢复对象的过程。文中将为大家详细讲讲二者的原理与实现,需要的可以参考一下
    2022-11-11
  • IntelliJ IDEA 2021 Tomcat 8启动乱码问题的解决步骤

    IntelliJ IDEA 2021 Tomcat 8启动乱码问题的解决步骤

    很多朋友遇到过IntelliJ IDEA 2021 Tomcat 8启动的时候出现各种奇葩问题,最近有童鞋反映IntelliJ IDEA 2021 Tomcat 8启动乱码,正好我也遇到这个问题,下面我把解决方法分享给大家需要的朋友参考下吧
    2021-06-06

最新评论