1.集合的三种通用遍历方法

之前我们学习过集合的遍历方法,为什么这里还要再学呢?

这是因为,之前我们用的遍历方法使用了索引,但我们知道set接口的实现类的集合均无索引,所以我们要学习通用的遍历方法

2.迭代器遍历

1.迭代器

迭代器叫做Iterator,是一个接口,我们知道接口是不能直接实例化的

所以,我们通过集合调用iterator方法,以多态的形式创建迭代器对象

如下图,左边是迭代器,也就是接口,那么右边就必然是实现类对象

我们通过ArrayList点开源码,发现iterator方法new了一个itr对象,而itr实现了Iterator接口

2.迭代器遍历

1.next方法

Iterator接口里面有两个方法,其中next方法可以帮我们从集合中获取到元素

如图,集合中存在三个学生对象,我们调用一次next方法,就获取到了一个学生对象



.



.

那么,只要调用三次next,就可以将这三个学生对象全部获取到了

2.hasnext方法

为了获取到三个对象,就要调用三次next,假如有一万个对象,那也得调用next方法吗?实在麻烦

hasnext方法就可以解决这个问题

--hasnext方法用于判断集合中是否有元素可以获取,如果有就返回true,否则false

根据这个性质,我们就可以使用while循环搭配上hasnext和next来进行迭代器遍历,如图



.

3.迭代器遍历原理

了解java中的源代码,更便于我们理解迭代器,如下图

当我们通过iterator获取到迭代器后,就会产生Itr对象,即上面的代码

Itr对象里有一个cursor变量,该变量表示指针,也就是右边的箭头,指针会指向索引

又因为cursor是成员变量,所以默认值为0

接着进入while循环,走hasnext方法

根据上图可知,该方法判断集合中是否还有元素可以遍历是通过集合长度来判断的,当指针不等于集合的长度时,说明还有元素可以遍历

在这里,curosr=0,明显不等于size=4,while循环通过,走next方法

next方法中,声明了一个变量i,然后cursor给i赋值,用于记录上一次的cursor,接着cursor加1,指针指向1号索引,此时还没有获取到元素A!

elementData[]就是一个数组,[]里放的就是i,此时i=0,所以会获取到元素A,也就将元素A返回给我们了

由此可知,next方法底层原理是指针先移动,然后再将上一次的元素返回

走完next,回到while,接着走hasnext,此时cursor=1,不等于size,满足条件,再走next,以此类推.......

在循环的过程中,next方法最好只调用一次,否则会因为指针的移动而造成问题



.

.

4.增强for循环--本质迭代器

“:”右边写要遍历的集合,左边写接收获取到的元素的变量

快捷键:

5.foreach循环--本质迭代器

foreach循环里的参数consumer是一个函数式接口,所以要给实现类对象

使用匿名内部类重写后的方法,()里的参数就是集合里遍历的所有元素(stu)



.

因为是函数式接口,我们还可以用Lambda表达式

集合的通用遍历方法--java进阶day09的更多相关文章

  1. jQuery通用遍历方法each的实现

    each介绍 jQuery 的 each 方法,作为一个通用遍历方法,可用于遍历对象和数组. 语法为: jQuery.each(object, [callback]) 回调函数拥有两个参数:第一个为对 ...

  2. List集合三种遍历方法

    List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb ...

  3. Ruby 集合数组常用遍历方法

    迭代器简介 先简单介绍一下迭代器. 1.一个Ruby迭代器就是一个简单的能接收代码块的方法(比如each这个方法就是一个迭代器).特征:如果一个方法里包含了yield调用,那这个方法肯定是迭代器: 2 ...

  4. Map的遍历方法(java)

    方法一.Set<Object>  keySet();返回集合中所有的key组成的集合. 代码:Map<String , String > map=new HashMap();f ...

  5. Java遍历List集合的三种方法

    Java遍历List集合的三种方法 List<String> list = new ArrayList<String>(); list.add("aaa") ...

  6. Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)

    概述 Java语言中,提供了一套数据集合框架,其中定义了一些诸如List.Set等抽象数据类型,每个抽象数据类型的各个具体实现,底层又采用了不同的实现方式,比如ArrayList和LinkedList ...

  7. Java遍历list集合的4种方法

    list集合的遍历4种方法: package com.sort; import java.util.ArrayList; import java.util.Iterator; import java. ...

  8. Java ——集合框架 list lambda set map 遍历方法 数据结构

    本节重点思维导图 集合框架 有序无序:元素放入的顺序与取出的顺序是否一致,一致即为有序,不一致即无序. List:允许重复.有序 ArrayList:长度可变的数组,遍历速度快 LinkedList: ...

  9. Java遍历集合的几种方法

    遍历集合的几种方法 用不同的方法遍历集合. public interface Iterator:对Collection进行迭代的迭代器.迭代器取代了Java Collections FrameWork ...

  10. java 遍历map 方法 集合 五种的方法

    package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...

随机推荐

  1. o3 发布了,摔碎了码农的饭碗

    大家好,我是汤师爷~ 在 2024 年底,OpenAI 发布了最新推理模型 o3.o3模型相当炸裂,在世界级编程比赛中拿下第 175 名,打败 99.9% 的参赛者.AI 写代码都赶上顶级程序员了,程 ...

  2. Android开发快速入门iOS开发概览

    注:本文同步发布于微信公众号:stringwu的互联网杂谈 Android开发快速入门iOS开发概览 1 前言 笔者总结了自己在拥有Android开发的相关基础后入门iOS开发时遇到的点点滴滴给其他想 ...

  3. canal源码分析简介-1

    1.0 canal源码分析简介 canal是阿里巴巴开源的mysql数据库binlog的增量订阅&消费组件.项目github地址为:https://github.com/alibaba/can ...

  4. Peewee:Python 简洁强大的 ORM 框架

    在 Python 的开发世界中,数据库操作是至关重要的一环. 今天介绍的 Peewee 作为一款简洁且功能强大的 ORM(对象关系映射)框架,为开发者提供了高效便捷的数据库交互方式. 1. Peewe ...

  5. ZUC-生成随机序列

    问题 ZUC国标上的三个例子生成随机序列 例子1 例子2 例子3 代码1 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #inclu ...

  6. 通过串口通信 对TCP传输层以下的理解

    这可能是近期暂时最后一篇c嵌入式的文章了 基础的串口使用 参照网上的stm32教程套路引入标准库,初始化芯片手册上对应串口引脚 ,初始化stm32串口功能,然后有数据了就自然在寄存器上,就这样,你的波 ...

  7. 蝉联第一,天翼云电脑持续领跑中国DaaS市场!

    近日,IDC发布的<中国虚拟桌面软件及云服务市场半年跟踪报告>数据显示,中国电信天翼云在2023年上半年中国桌面即服务(Desktop as a Service,以下简称"Daa ...

  8. 天翼云重磅升级边缘WAF能力,助力企业高效应对Web安全威胁!

    "2022年,网络高危漏洞数量同比增长了13%:Q2遭受攻击的API数量月均超过了25万:物联网的普及大大降低了DDoS的攻击成本,大流量攻击指数显著提升:恶意Bot流量仍在持续增长,202 ...

  9. IDEA中使用Yapi上传接口

    一.Idea下载插件YapiUpload 二.修改该项目的隐藏文件夹idea .idea文件下修改misc.xml增加如下配置  <component name="yapi" ...

  10. 动态能力理论&知识管理理论--商业之所见

    动态能力理论:企业整合,建立和再配置内外部资源以适应快速变化环境的能力. (1)"动态"指的是适应不断变化的环境,企业必须具有不断更新自身能力的能力: (2)"能力&qu ...