package GeneIterAdaptReflect.com;
import java.util.*;
/*
* 第一:java.lang. Iterable接口
* //实现这个接口,运行对象成为forEach语句的目标;
* interface Iterable<T>{
* //返回一个在 一组T类型的元素上 进行迭代的迭代器;
* Iterator<T> iterator();
* }
* 注释:实现这个接口允许对象成为 "foreach" 语句的目标。这样就可以类似使用数组那样,用foreach语句来遍历所有有关的对象,
* 但是对于自定义的类型和其实例对象,想要使用foreach语句来遍历它本身集体的话,可能就要实现Iterable<T>接口了。
*
* 第二:java.util.Iterator接口
* //对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。
* //迭代器与枚举有两点不同: 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
方法名称得到了改进。
* interface Iterator<E>{
* boolean hasNext();
* E next();
* //remove 可选操作,从迭代器指向的 collection 中移除迭代器返回的最后一个元素
* void remove();
* }
* 通过以下两个例子来展现iterator的用法;
* 首先理解下为什么存在迭代器;
* 迭代器就是集合取出元素的方式;
* 因为每个容器都有 存和取的功能,由于每个容器的数据存储结构不同,其存和取的方式也就不同;而对于取出元素,其不止一个动作来完成(先判断 再取等多个动作)
* 那么这多个动作就应该封装成一个对象;这样每个容器中就都有一个取出数据的对象;因为不同容器的数据结构不同,因此每个容器中取出对象的实现方式也不一样;
* 那么就应该在每个容器内部 定义一个取出元素的内部类(因为数据就存在这个容器中,直接用内部类来操作这些数据时最方方便的,因此用内部类),但是这些取出
* 的内部类有自己的共性东西 都有 判断和取出。因此就可以向上抽取成一个接口(Iterator)
*
* 对内部类的理解和迭代器设计模式的理解:
* 内部类: 容器是一个事物,而容器内部存储的东西也是一个事物,那么就可以定一个内部类在容器内操容器内的事物;
* 迭代器设计模式:多个类都有自己操作其内部数据的方式,而这些方式又有相同的共性,那么就可以把这个共性抽取成一个接口,在各个类中提供一个方法
* 来返回这个接口,通过这个接口(进而通过内部类)来操作这多个类中的数据;
*
* 源代码:
* 看ArrayList中的iterator设计方式;由于ArrayList 和 LinkedList 继承与AbastractList类
*
* public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
* public Iterator<E> iterator() {
* return new Itr();
* }
* //内部类
* private class Itr implements Iterator<E> {
* int cursor = 0;
* int lastRet = -1;
* int expectedModCount = modCount;
public boolean hasNext() {
return cursor != size();
}
public E next() {
checkForComodification();
try {
int i = cursor;
E next = get(i);
lastRet = i;
cursor = i + 1;
return next;
} catch (IndexOutOfBoundsException e) {
checkForComodification();
throw new NoSuchElementException();
}
}
public void remove() {
if (lastRet < 0)
throw new IllegalStateException();
checkForComodification();
try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException e) {
throw new ConcurrentModificationException();
}
}
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}
* }
* }
*
*
* 对代码书写的理解:
* Iterator it = list.iterator();
* while(it.hasNext())
* sop(it.next());
* while循环 it这个对象在迭代器方法完成后并没有立刻释放,仍旧占用内存;
*
* for(Iterator it = list.iterator();it.hasNext();)
* sop(it.next());
* for的好处在于把it弄成了局部变量 方法完成 也就马上释放了 推荐写法;
*
* 实例1:Collection 和 Iterator
* 因为iterator是超接口Collection中的方法,那么实现Collection的子类,必定重写了iterator;
* 实例2:定义一个自己的 并通过Iteratro来取出成员
*
*
* */
//实例1:
class CollectionAndIterator {
String[] infos = "hello java : wo should say hello to the world !!".split(" ");
List<String> infoList = Arrays.asList(infos);
public void showForeach(){
for(String str:infoList){
System.out.print(str+" ");
}
}
public void showDefaultIterator(){
for(Iterator<String> it = infoList.iterator();it.hasNext();){
System.out.print(it.next()+" ");
}
}
public void showReverseIterator(){
ReverseIteratorList<String> ris = new ReverseIteratorList<String>(infoList);
for(Iterator<String> it = ris.reverseIterator();it.hasNext();)
System.out.print(it.next()+" ");
}
@SuppressWarnings("serial")
private class ReverseIteratorList<T> extends ArrayList<T>{
private Collection<T> c=null;
ReverseIteratorList(Collection<T> c){
super(c);
this.c = c;
}
private Iterator<T> reverseIterator(){
return new Iterator<T>(){
int current = c.size()-1;
public boolean hasNext(){
return current>-1;
}
public T next(){
return get(current--);
}
};
}
}
}
public class IteratorTest {
public static void main(String[] args) {
CollectionAndIterator cai = new CollectionAndIterator();
System.out.print("foreach: ");
cai.showForeach();
System.out.println();
System.out.print("defaultIterator: ");
cai.showDefaultIterator();
System.out.println();
System.out.print("resvereIterator: ");
cai.showReverseIterator();
}
}
相关推荐
VS Code ESP-IDF无法找到源文件、头文件波浪线解决
背景:想要编译小智AI项目,可以正常编译。但是一些头文件,例如#include <nvs.h>等无法找到。
java中iterator迭代器的使用
补充知识点:快速生成while循环遍历迭代器对象遍历iterator的快捷键是:itit。
LVGL hal disp(porting display)
LVGL本身是没有对接最终的显示框架的,所以到具体的某个平台上,需要自行porting。
java迭代器
Iterator接口也是Java集合中的成员,但作用与Collection系列与Map系列不同,Collection与Map主要是用来存储其他对象,类似容器。而Iterator主要作用是遍历集合中的对象,起到迭代器的作用
从零开始理解Linux中断架构(1)-前言
前段时间在转行手撸WIFI路由器,搞wifi路由器需要理解网络驱动程序,以太网卡驱动程序,无线WIFI驱动程序,而网卡驱动的关键路径就在中断程序中,需要了解NIC设备驱动程序如何收发数据,为了彻底的知道数据包是如何二层传递上来的,又需要了解一点Linux中断系统。第一次看到这张表是无感的,大概能够看懂的就是那个中断次数,因为不停的cat,这个数值会一直不停的增加。第一列是逻辑中断号,第二三列是中断次数,第四列是中断控制器的名字,第五列是硬件中断号,第六列 中断类型,第七列是 中断源关联设备。
微信小程序 - 最新获取用户昵称 / 头像(wx.getUserProfile 接口被废弃后的代替方案)详细教程,2022 年之后的所有微信小程序,获取用户信息最新详细教程,附带示例源代码
微信小程序wx.getUserProfile接口废了用什么代替,微信小程序wx.getUserProfile不能用了怎么办,wx.getUserProfile失效有什么替代方案吗,微信新规定头像昵称填写最新教程,目前微信小程序最新获取用户头像昵称教程,微信小程序用户头像昵称获取规则调整公告,2022改版后的微信小程序如何获取用户头像和昵称信息,微信小程序官方废弃getUserProfile后如何实现获取用户信息,微信小程序wx.getUserProfile接口返回了默认头像昵称,微信小程序获取用户信息不
Iterator(迭代器)
Iterator Java 迭代器
LM358模拟声音传感器原理图设计,已量产(声音传感器)
最近在做智能家居设备的声音触发模块时,搭了个基于 LM358 的模拟声音传感器电路 —— 不用复杂的专用芯片,靠通用运放就能把环境声音转化为可被单片机 AD 采集的电压信号,成本压得很低,实际调试下来灵敏度和稳定性都够用。今天把这个电路拆解开,聊聊每部分的设计思路。
java 迭代器 重置_Java中如果集合迭代器已经迭代完了,如果还想迭代,只能在调用一遍iterator返回一个新的吗?...
展开全部答: 是的62616964757a686964616fe4b893e5b19e31333365633937,需要重新调用.iterator()方法,放回1个新的迭代器.原因: 1: 因为迭代器使用完了,里面也就没有元素了,2: 并且java语言没有提供重置的方法.代码如下importjava.util.ArrayList;importjava.util.Iterator;pu...
SonarQube 完整手册(2026 最新)
摘要: SonarQube是一款静态代码分析(SAST)平台,支持20+语言(如Java/Go/Python),提供Bug、漏洞、代码异味等检测,集成DevOps流水线。其架构包含服务端、扫描器和SonarLint插件。2026年四大版本:免费社区版(基础功能)、开发者版(多分支/PR分析)、企业版(合规治理)、数据中心版(高可用集群)。核心功能包括质量门禁(QualityGate)、密钥泄露检测及六大质量指标。部署推荐Docker+PostgreSQL,扫描支持Maven/CLI方式。
Google Earth Engine:LandTrendr (Landsat Collection 2)全更新使用(代码调用+UI交互)
本文介绍了使用Landsat Collection 2进行连续变化监测的分析方法,包含代码实现和可视化界面两部分。代码部分通过Google Earth Engine平台运行LandTrendr算法,设置参数包括时间范围、光谱指数、变化检测阈值等,最终生成变化幅度和检测年份的可视化图层,并将结果导出至Google Drive。可视化界面部分展示了基于LandTrendr的土地覆盖变化结果,结合Landsat影像进行分析。整个方法实现了从数据处理到结果展示的完整流程,适用于森林覆盖等环境变化监测。
java重置迭代器指针位置_Iterator、Iterable接口的使用及详解
Java集合类库将集合的接口与实现分离。同样的接口,可以有不同的实现。Java集合类的基本接口是Collection接口。而Collection接口必须实现Iterator接口。以下图表示集合框架的接口,java.lang以及java.util两个包里的。其他部分可以从左向右看,比如Collection的Subinterfaces有List,Set以及Queue等。package java.uti...
“/usr/lib/wsl/wsl-setup“ failed, exiting
WSL2安装Ubuntu时出现"wsl-setup failed"错误的解决方法 摘要:当Windows用户名包含中文字符时,安装WSL2+Ubuntu会出现"wsl-setup failed"错误。本文提供两种解决方案:1)修改中文用户名(风险较大);2)通过命令手动配置。推荐第二种方法:先使用"wsl -l -v"查看Ubuntu名称,再通过"wsl -d Ubuntu20.04 -e /bin/bash"命令启动WSL2系
Java初学之集合中使用迭代器遍历
迭代概念: 迭代器概述: 集合是用来存储元素,存储的元素需要查看,就需要迭代(遍历)。 我们用两个demo来演示一下当集合中存储字符串和自定义对象的时候使用迭代器来遍历元素时的情形,要注意掌握iterator 迭代器对象中的hasNext()和next()方法的使用,代码如下: import java.util.ArrayList; import java.util.Collection; i...
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
Java迭代器Iterator代码详解(迭代器模式)
你好我是辰兮,很高兴你能来阅读,本篇给你介绍Java设计模式之迭代器模式,简单的讲解Iterator具体如何使用,分享给初学者,大家一起进步! 文章目录一、迭代器介绍二、ArrayList案例三、HashMap案例四、拓展相关 一、迭代器介绍 迭代器模式介绍 所谓迭代器模式就是提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。迭代器模式是将迭代元素的责任交给迭代器,而不是聚合对象,我们甚至在不需要知道该聚合对象的内部结构就可以实现该聚合对象的迭代。 通过迭代器模式,使得聚合对象.
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
JAVA15——手动实现迭代器
手动实现迭代器 一、实现迭代器中的hasNext和next方法: /** * 简化迭代器原理 * hasNext * next * @author qiao39gs * */ public class MyArrayList { private String[] elem = {"a","b","c","d","e","f","g"}; private int size = elem.length; private int cursor = -1; /** * 判断是否存在
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
Java进阶篇--迭代器模式
上图中,在调用Iterator的next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next()方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next()方法时,迭代器的索引会指向第二个元素并将该元素返回,以此类推,直到hasNext()方法返回false,表示到达了集合的末尾,终止对元素的遍历。通过迭代器获取ArrayList集合中的元素时,这些元素的类型都是Object类型,如果想获取到特定类型的元素,则需要进行对数据类型强制转换。
java迭代器遍历list_Java使用Iterator迭代器遍历集合数据的方法小结
本文实例讲述了Java使用Iterator迭代器遍历集合数据的方法。分享给大家供大家参考,具体如下:1、使用迭代器遍历ArrayList集合package com.jredu.oopch07;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Ch05 {public sta...
java初学之iterator迭代器
迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。 Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序
Java中的Iterator迭代器详解
🍦Iterator接口 在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。 想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:
Java集合利用迭代器遍历
Java集合利用迭代器遍历
Java集合框架之迭代器:轻松掌握元素遍历的艺术
🔥「炎码工坊」技术弹药已装填!点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】:假设您已掌握Java基础语法,但尚未系统学习集合框架。我们将从点名场景切入,用真实代码+可视化图解,带您彻底理解迭代器。一、问题驱动:点名场景中的痛点💡二、迭代器(Iterator)解决方案核心思想:提供统一的遍历接口hasNext()三、不同实现方案对比1. 三种遍历方式对比2. 不同集合的迭代器性能⚠️,否则触发四、迭代器底层原理图解五、进阶技巧:ListIterator双向遍历。
Java 集合进阶:从 Collection 接口到迭代器的实战指南
在 Java 编程中,集合框架是处理数据容器的核心工具,也是面试中的高频考点。本文将结合黑马程序员 Java 零基础教程的内容,深入解析单列集合的顶层接口 Collection 及其迭代器的使用方法,帮助初学者构建完整的集合知识体系。
干货|一文读懂Java Iterator迭代器实现原理与使用
迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节,只要拿到这个对象,使用迭代器就可以遍历这个对象的内部 文章目录前言一、迭代器二、迭代器使用步骤三、代码示例四、迭代器原理 前言 ArrayList使用内部类实现了Iterator接口,并提供iterator方法来获取迭代器对象,可以通过它来遍历顺序表 一、迭代器 java.util.Iterator接口:迭代器(对集
Java输出ArrayList(迭代器方法)
使用Java迭代器来输出集合中的元素
Java 中的 Iterator 迭代器详解
在程序开发中,经常需要遍历集合中的所有元素。在调用 Iterator 的 next 方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的 next 方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用 next 方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到 hasNext 方法返回 false,表示到达了集合的末尾,终止对元素的遍历。public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。
1489



被折叠的 条评论
为什么被折叠?



