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

作者:蓝桉cyq 时间:2023-04-29 08:11:40 

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));
}

来源:https://blog.csdn.net/m0_71485750/article/details/127340201

标签:Java,Collection,集合,遍历
0
投稿

猜你喜欢

  • 详解LeakCanary分析内存泄露如何实现

    2022-12-03 22:04:40
  • Android应用UI开发中Fragment的常见用法小结

    2021-06-16 19:35:54
  • 解读JDK8踩坑JCE加密限制版本问题

    2021-09-20 12:42:35
  • Java移动文件夹及其所有子文件与子文件夹

    2023-08-01 09:53:38
  • Java单例模式实现的几种方式

    2021-06-09 18:38:47
  • java判断字符串相等的方法

    2023-05-19 14:08:30
  • 零基础学习教程之Linux下搭建android开发环境

    2021-12-08 02:13:24
  • SQL Server中的数据复制到的Access中的函数

    2021-10-05 16:06:42
  • web打印 window.print()介绍

    2022-10-22 23:50:59
  • 解决idea 暂存文件或idea切换分支代码丢失的问题

    2023-09-11 07:52:41
  • Android自定义View实现闪耀字体效果

    2023-05-10 02:27:43
  • Android N多窗口支持

    2022-08-08 19:27:37
  • Java编程接口回调一般用法代码解析

    2023-11-11 06:55:11
  • Android ViewPager无限循环滑动并可自动滚动完整实例

    2022-09-09 18:26:55
  • 关于Maven混合配置私有仓库和公共仓库的问题

    2021-10-15 20:30:51
  • Android的消息机制

    2023-08-05 10:19:28
  • C#中一个高性能异步socket封装库的实现思路分享

    2023-12-01 15:20:45
  • Springboot actuator应用后台监控实现

    2022-02-01 11:48:16
  • SpringBoot使用Sharding-JDBC实现数据分片和读写分离的方法

    2023-07-27 02:15:50
  • Java使用synchronized修饰方法来同步线程的实例演示

    2022-11-29 18:33:29
  • asp之家 软件编程 m.aspxhome.com