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

目录
  • Collection遍历方式
    • 迭代器遍历
    • foreach遍历
    • Lambda遍历

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集合遍历内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java集合Collection常用方法解读

    目录 前言 为什么要有集合 Collection方法接口介绍 java8新特性操作集合 总结 前言 出去面试的时候,对java的集合框架考察的知识点还是蛮多的.除了基础的集合常见API使用,对集合底层的实现原理以及数据结构等也有很多考察方面.而自己对这方面知之甚少,特地抽空进行研究和学习一下. 为什么要有集合 提到集合就不得不提一下数组,好多集合底层都是依赖于数组的实现.数组一旦初始化后,长度就确定了,存储数据对象不能达到动态扩展,其次数组存储元素不便于对数组进行添加.修改.删除操作,而且数组可

  • Java中Collection集合常用API之 Collection存储自定义类型对象的示例代码

    目录 Collection常用API Collection存储自定义类型对象 Collection常用API Collection集合API Collection是单列集合的祖宗接口,因此它的功能是全部单列集合都可以继承使用的. Collection有如下常用API 方法名称 说明 add(E e) 把给定的对象添加到当前集合中 clear() 清空集合中所有的元素 remove(E e) 把给定的对象在当前集合中删除 contains(Object obj) 判断当前集合中是否包含给定的对象

  • Java集合的定义与Collection类使用详解

    什么是集合? 概念:对象的容器,定义了对多个对象进行操作的常用方法.可实现数组的功能. 集合和数组的区别: 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能引用类型 Collection : Collection体系结构: Collection的使用:包括增加元素.删除元素.遍历元素(两种方法)和判断 直接看代码: package com.collections; import java.util.ArrayList; import java.util.Collection

  • java集合collection接口与子接口及实现类

    目录 概要 1 Collection接口的实现子类特性 2 通过实现子类ArrayList体现Collection接口方法 2.1 代码演示示例 3 集合的遍历:①使用Iterator(迭代器)②增强for循环遍历 3.1 代码示例 4 List相关解读 5 Set接口分析 Map接口及实现子类 结语 概要 集合概念:像数组一样是java的一个容器:和数组不同的是数组只能存同类型的数据,且长度定义之后就不可变,集合不仅,可以存多种类型的数据,而且还提供了增.删.改.查的方法: 集合分类:可以分为

  • Java spring的三种注入方式详解流程

    目录 设置Spring的作用域 自动注入 @Primary Qualifier @ComponentScan不同的配置对性能的影响 懒加载 三种注入方式 字段注入(IDEA 会提示不推荐) 字段注入的bean类外部不可见 循环依赖问题 构造器注入(官方推荐) set方法注入 设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUniqueBeanDefin

  • Java 高并发的三种实现案例详解

    提到锁,大家肯定想到的是sychronized关键字.是用它可以解决一切并发问题,但是,对于系统吞吐量要求更高的话,我们这提供几个小技巧.帮助大家减小锁颗粒度,提高并发能力. 初级技巧-乐观锁 乐观锁使用的场景是,读不会冲突,写会冲突.同时读的频率远大于写.  悲观锁的实现: 悲观的认为所有代码执行都会有并发问题,所以将所有代码块都用sychronized锁住 乐观锁的实现: 乐观的认为在读的时候不会产生冲突为题,在写时添加锁.所以解决的应用场景是读远大于写时的场景. 中级技巧-String.i

  • Spring中Bean的三种实例化方式详解

    目录 一.环境准备 二.构造方法实例化 三.分析Spring的错误信息 四.静态工厂实例化 4.1 工厂方式创建bean 4.2 静态工厂实例化 五.实例工厂与FactoryBean 5.1 环境准备 5.2 实例工厂实例化 5.3 FactoryBean的使用 六.bean实例化小结 一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下: 二.构造方法实例化 在

  • Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待

  • vue路由传参三种基本方式详解

    这篇文章主要介绍了vue路由传参三种基本方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据. 父组件中: <li v-for="article in articles" @click="getDescribe(article.id)"> methods: 方案一: getDescribe(id) { // 直接调用$r

  • python自动化测试selenium核心技术三种等待方式详解

    目录 1 使用python自带模块time的sleep方式 2 隐式等待(implicitly_wait) 3 显示等待(WebDriverWait) UI自动化测试过程中,可能会出现因测试环境不稳定.网络慢等情况,如果不做任何处理的话,会出现无法定位到特定元素而报错,导致自动化测试无法顺利执行. selenium官网手册:Waits | Selenium slenium自动化测试中,主要涉及三种等待方式: 1 使用python自带模块time的sleep方式 缺点:即使网络条件较好时,依旧按照

  • java中关于Map的三种遍历方法详解

    map的三种遍历方法!集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ 复制代码 代码如下: /* * To change this template, choose Tools | Templates * and open the template in the editor. */package cn.tsp2c.liubao;import java.util.Collection;import java.util.HashMap;import java.util

  • Java二叉树的四种遍历方式详解

    二叉树的四种遍历方式: 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使得每个结点被访问依次且仅被访问一次. 四种遍历方式分别为:先序遍历.中序遍历.后序遍历.层序遍历. 遍历之前,我们首先介绍一下,如何创建一个二叉树,在这里用的是先建左树在建右树的方法, 首先要声明结点TreeNode类,代码如下: public class TreeNode { public int data; public TreeNode leftC

  • Android编程中沉浸式状态栏的三种实现方式详解

    本文实例讲述了Android编程中沉浸式状态栏的三种实现方式.分享给大家供大家参考,具体如下: 沉浸式状态栏 Google从android kitkat(Android 4.4)开始,给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7.0以上系统一样了. 首先看下效果 首先看下第一种方式 系统的方式沉浸式状态栏实现 步奏一 //当系统版本为4.4或者4.4以上

  • Java中Singleton的3种实现方式详解

    一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当今面向对象程序的实际开发中,Singleton 通常被用来代表一个无状态的对象,例如函数和那些本质上唯一的系统组件. 值得注意的是,使类成为 Singleton 会使得它的客户端测试变得非常困难,因为我们不可能给Singleton替换模拟实现,除非我们实现一个充当其类型的接口. 实现 Singleton 有三

随机推荐