集合的通用遍历方法--java进阶day09
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的更多相关文章
- jQuery通用遍历方法each的实现
each介绍 jQuery 的 each 方法,作为一个通用遍历方法,可用于遍历对象和数组. 语法为: jQuery.each(object, [callback]) 回调函数拥有两个参数:第一个为对 ...
- List集合三种遍历方法
List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb ...
- Ruby 集合数组常用遍历方法
迭代器简介 先简单介绍一下迭代器. 1.一个Ruby迭代器就是一个简单的能接收代码块的方法(比如each这个方法就是一个迭代器).特征:如果一个方法里包含了yield调用,那这个方法肯定是迭代器: 2 ...
- Map的遍历方法(java)
方法一.Set<Object> keySet();返回集合中所有的key组成的集合. 代码:Map<String , String > map=new HashMap();f ...
- Java遍历List集合的三种方法
Java遍历List集合的三种方法 List<String> list = new ArrayList<String>(); list.add("aaa") ...
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)
概述 Java语言中,提供了一套数据集合框架,其中定义了一些诸如List.Set等抽象数据类型,每个抽象数据类型的各个具体实现,底层又采用了不同的实现方式,比如ArrayList和LinkedList ...
- Java遍历list集合的4种方法
list集合的遍历4种方法: package com.sort; import java.util.ArrayList; import java.util.Iterator; import java. ...
- Java ——集合框架 list lambda set map 遍历方法 数据结构
本节重点思维导图 集合框架 有序无序:元素放入的顺序与取出的顺序是否一致,一致即为有序,不一致即无序. List:允许重复.有序 ArrayList:长度可变的数组,遍历速度快 LinkedList: ...
- Java遍历集合的几种方法
遍历集合的几种方法 用不同的方法遍历集合. public interface Iterator:对Collection进行迭代的迭代器.迭代器取代了Java Collections FrameWork ...
- java 遍历map 方法 集合 五种的方法
package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...
随机推荐
- 前端学习openLayers配合vue3(面的绘制,至少三个点)
我们学习了点和线的绘制,当然我们也可以绘制一个面 关键代码,需要注意的一点就是面的绘制需要三维数组,线的绘制是个二维数组 const polygonLayer = new VectorLayer({ ...
- 前端开发常用git命令详细版
1.新建代码库 当前目录创建一个git代码库 git init 新建一个目录文件 将其初始化为git代码库 git init [pro-name] 远端拉去项目 git clone [url] 2.基 ...
- G1原理—2.G1是如何提升分配对象效率
大纲 1.G1的对象分配原理是怎样的 2.深入分析TLAB机制原理 3.借助TLAB分配对象的实现原理是什么 4.什么是快速分配 + 什么是慢速分配 5.大对象分配的过程 + 与TLAB的关系 6.救 ...
- Java并发容器详解,及使用场景
并发容器的由来 在Java并发编程中,经常听到Java集合类,同步容器.并发容器,那么他们有哪些具体分类,以及各自之间的区别和优劣呢? 只有把这些梳理清楚了,你才能真正掌握在高并发的环境下,正确使用好 ...
- w3cschool-Python3 高级教程
https://www.w3cschool.cn/python3/python3-reg-expressions.html Python3 正则表达式 re.match 函数 re.match 尝试从 ...
- DVWA靶场Authorisation Bypass (未授权绕过) 漏洞通关教程及源码审计
Authorisation Bypass 授权绕过(Authorisation Bypass)是一种严重的安全,通过利用系统的或错误配置,绕过正常的访问控制机制,获得未经授权的访问权限.这种可能导致敏 ...
- google gtest框架入门使用案例
通过本文可以收获:google gtest急速入门.google gtest资源网站. google gtest是什么 google gtest是谷歌开源的c++单元测试框架,非常的好用. 起码个人感 ...
- delphi中实现http请求和提交
在对接本地的一个药械监管系统使用实现的代码,编译环境delphi Xe7 ,使用类TIdHTTP实现网络的get请求和post提交 //设置组件的属性 procedure TfrmMain.SetHt ...
- react给当前元素添加一个类以及key的作用
给当前元素添加一个类是通过className来处理的: 引入css;直接from XXXX import React, { Component } from "react"; // ...
- JAVA运算符及实例
JAVA语言支持以下运算符 优先级() 算数运算符:+,-,*,/,%,++,-- 实例1: package operator; public class Demo01 { public ...