【 java 集合】使用迭代器 Iterator 遍历集合

news2024/11/19 20:29:13

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
  • 📝 个人主页:馆主阿牛🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:java 小白到高手的蜕变🍁
  • 💬格言:要成为光,因为有怕黑的人!🔥
    请添加图片描述

目录

    • 📋 个人简介
  • 前言
    • Iterator 概述
    • Iterator 的使用
      • 使用 next() 方法遍历集合
      • 使用 remove 方法删除元素
    • 迭代器 Iterator 的执行原理
    • 使用foreach循环遍历集合或数组
  • 结语

前言

上两篇文章总结了集合体系以及Collection常用方法,本节我们来学习使用迭代器 Iterator 遍历集合!

Iterator 概述

  • Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
  • GOF 给迭代器模式的定义为:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。
  • Collection 接口继承了 java.lang.Iterable 接口,该接口有一个 iterator ()方法,那么所有实现了 Collection 接口的集合类都有一个 iterator ()方法,用以返回一个实现了 Iterator 接口的对象。
  • Iterator 仅用于遍历集合, lterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。
  • 集合对象每次调用 iterator() 方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。

Iterator 的使用

使用 next() 方法遍历集合

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
 * @Author:Aniu
 * @Date:2022/12/6 11:51
 * @description TODO
 */
public class Demo {
    public static void main(String[] args) {
        Collection coll = new ArrayList();
        coll.add("aniu");
        coll.add(123); //自动装箱
        coll.add(new String("miao"));

        // 遍历集合
        Iterator iterator1 = coll.iterator();
        // 方式一:利用 for 循环 -》不推荐
        for(int i=0;i<coll.size();i++){
            System.out.println(iterator1.next());
        }

        System.out.println("-----------");

        // 方式二 :利用 while 循环 -》推荐
        Iterator iterator2 = coll.iterator();
        while(iterator2.hasNext()){
            System.out.println(iterator2.next());
        }
    }
}

在这里插入图片描述

使用 remove 方法删除元素

我们也可以使用迭代器中的 remove 方法删除集合中的元素。

Collection coll = new ArrayList();
coll.add("aniu");
coll.add(123); //自动装箱
coll.add(new String("miao"));
// 删除"miao"
Iterator iterator = coll.iterator();
while(iterator.hasNext()){
    Object obj = iterator.next();
    if("miao".equals(obj)){
        iterator.remove(); // 删除"miao"
    }
}

System.out.println(coll);

在这里插入图片描述

迭代器 Iterator 的执行原理

Iterator iterator = coll.iterator();
while(iterator.hasNext()){ //hasnext() 判断是否还有下一个元素
    System.out.println(iterator.next()); //next 1.指针下移 2.将下移以后集合位置上的元素返回
}

在这里插入图片描述

使用foreach循环遍历集合或数组

foreach循环又叫增强for循环,对于这个应该都很熟悉了吧,看下大概结构!

// for(datatype 变量名 : 遍历对象)
for(Object obj:coll){
   System.out.println(obj);
}

内部还是调用了迭代器!
需要注意的是,使用增强for循环无法改变数组里的值。
例:

String[] arr = new String[]{"aniu","haha","zz"};
for(int i=0;i<arr.length;i++){
    arr[i] = "momo";
}
for(int i=0;i<arr.length;i++){
    System.out.println(arr[i]);
}

System.out.println("----------");

String[] arr1 = new String[]{"aniu","haha","zz"};
for (String str:arr1){
    str = "momo";
}
for(int i=0;i<arr1.length;i++){
    System.out.println(arr1[i]);
}

在这里插入图片描述
可以看到增强for并没修改数组的值,本质上是将遍历值复制给了新变量String str,因此改变的是这个新变量的值!

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

空气源热泵设备远程监控的优点

空气源热泵热水器是一种节能、环保、安全的新能源产品&#xff0c;也是家庭采暖、生活热水及空调制冷等方面的最佳选择。 在使用时&#xff0c;只需一次少量的电能就能实现连续制热和制冷&#xff0c;其制热效率是燃气热水器、电热水瓶和燃油热车等供热设备的数倍&#xff0c;因…

亿联会议系统操作使用全教程

环境&#xff1a; 终端VC800 亿联会议pc.v4.2.11 教程&#xff1a; 一、下载安装亿联会议PC/手机APP 官网下载 1.以下教程为Windows版演示 2.安装亿联会议软件&#xff08;具体操作按软件提示步骤进行&#xff09; 3.注册账号 3.1点击免费注册按钮&#xff0c;自动跳转至…

SCI投稿经验分享:成功发表一篇中科院2区智能物联网类SCI真的不难

我是如何用三个月成功发表一篇TOP 【本期推荐】本期小编分享点不一样的内容。关注小编三个月以上的铁粉可能会留意到七月份本协会新增了一本计算机智能物联网类1区TOP刊&#xff0c;该刊一经推出就受到了广大作者的纷纷投稿。奈何期刊合作期刊编辑严格控制版面&#xff0c;所以…

配电网络扩展规划:考虑使用概率性能源生产和消费概况的决策(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

Java开发学习(三十一)----Maven属性与版本管理

一、属性 1.1 问题分析 如下图所示 你会发现&#xff0c;如果现在想更新Spring的版本&#xff0c;你会发现依然需要更新多个jar包的版本&#xff0c;这样的话还是有可能出现漏改导致程序出问题&#xff0c;而且改起来也是比较麻烦。 问题清楚后&#xff0c;我们需要解决的话…

SpringBoot 打 jar包和打war 包配置

文章目录1. 前言2. SpringBoot 打 jar 包3. SpringBoot 打 war 包4.小结1. 前言 目前我们熟知的SpringBoot 打包方式&#xff0c;一共分为两种&#xff0c;一种是打jar 包&#xff08;内置tomcat 方式&#xff0c;yml 里的配置参数生效包括端口&#xff0c;和servlet 的contex…

EndNote参考文献导入

简介 本文介绍如何在Word作文过程中借助EndNote管理参考文献&#xff0c;关于如何将参考文献导入到EndNote中这里不做说明&#xff0c;假定需要的文献均已经导入。 具体步骤 为什么需要文献管理工具来生成参考文献呢&#xff1f;最核心的原因就是自动控制的&#xff0c;文献的…

JAVA SCRIPT设计模式--结构型--设计模式之ADAPTER适配器(6)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

代码详细教程+文档+PPT+源码等]SSM框架网上书城全套含微信支付|电商购物计算机专业毕业论文java毕业设计网站

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 计算机毕业设计java毕设SSM框架实现的网上书城-升级版_哔哩哔哩_bilibili项目资料网址: http://itzygogogo.com软件下载地址:http://itzygogogo.co…

Spring的IOC是啥?有什么好处?

单一职责原则 依赖倒转原则 最小知识原则 接口隔离原则 合成/聚合复用原则 里氏代换原则&#xff0c;任何基类可以出现的地方&#xff0c;子类一定可以出现 依赖倒置 假设我们设计一辆汽车&#xff1a;先设计轮子&#xff0c;然后根据轮子大小设计底盘&#xff0c;接着根…

封装基板出厂100欧姆,测试85欧姆?

作者&#xff1a;一博科技高速先生成员 陈亮 封装基板&#xff08;Package Substrate&#xff09;是半导体芯片的载体。为芯片提供连接、保护、支撑、散热、组装等功效&#xff0c;以实现多引脚化&#xff0c;缩小产品体积、改善电性能及散热性、多芯片模块化等。我们生活中看…

构造HTTP请求 以及 关于HTTPS的加密

1.构造HTTP请求 构造HTTP请求有很多种方式.使用html,使用jQuery,使用socket…等等. 这里我们介绍两种. 使用html使用jQuery 1.1.使用html构造HTTP请求 使用html构造HTTP请求,要使用到 form 标签. 这里form标签中的属性有两个. action :填写数据要返送到的地址.(URL)meth…

【云原生 | Kubernetes 实战】08、零故障升级之 Pod 健康探测——启动、存活、就绪探测

目录 一、Pod容器健康探测 1.1 为什么要对容器做探测&#xff1f; 默认的健康检查 探测类型 检查机制 探测结果 Pod 探针相关的属性 两种探针区别 1.2 启动探测 startupprobe exec 模式 tcpsocket 模式 httpget 模式 1.3 存活性探测 livenessProbe 通过 exec …

C++const修饰成员函数

#include "iostream"using namespace std;//常函数class Person { public://this指针的本质 是指针常量 指针的指向是不可以修改的//const Person * const this//在成员函数后面加const&#xff0c;修饰的是this的指向&#xff0c;让指针指向的值也不可以修改void …

纤维二糖-聚乙二醇-羟基Cellobiose-PEG-OH羟基-PEG-纤维二糖

纤维二糖-聚乙二醇-羟基Cellobiose-PEG-OH羟基-PEG-纤维二糖 中文名称&#xff1a;纤维二糖-羟基 英文名称&#xff1a;Cellobiose-OH 别称&#xff1a;羟基修饰纤维二糖&#xff0c;羟基-纤维二糖 羟基&#xff08;oxhydryl&#xff09;是一种常见的极性基团&#xff0c;化…

深入场景痛点,制造业数据应用思考与实践

数字化转型是我国制造业进一步创新式发展的关键&#xff0c;决定了企业在未来生存和发展的态势。 但对于企业而言&#xff0c;如何以低耗能、低成本、高效率的方式加快制造业转型升级的步伐&#xff0c;仍然是众多制造企业需要解决的问题。 深入制造企业数字化转型的场景&…

#Spring-boot高级

一、SpringBoot 整合 Mybatis 1、SpringBoot 整合 Mybatis MyBatis 帮助我们快速集成 SpringBoot 提供的一个组件包&#xff08;mybatis-spring-boot-starter)&#xff0c;使用这个组件可以做到以下几点&#xff1a; 自动检测现有的DataSource将创建并注册SqlSessionFactory…

从工地转行网络安全工程师,工资翻了好几倍,我想和大家聊聊我的经历

成功的从工地转行到办公室办公也有一年了&#xff0c;楼主就来说说&#xff0c;从工地到白领的过渡吧&#xff0c;这其中历经艰辛&#xff0c;最终终达成目标。没错&#xff0c;楼主现在成为了一位网络安全工程师… 先说说为什么转行吧&#xff0c;身边很多做土木工程的都转行…

还在一张张打印CAD图纸吗

用CAD打印少些图纸可以一张张的打印&#xff0c;但是需要打印上百甚至上千张图纸的时候一张张打印就不知道需要用多久的打印时间了&#xff0c;那么在CAD梦想画图软件中有一个批量打印图纸的功能&#xff0c;能节约很大一部分打印时间 操作步骤 1.在网上下载CAD梦想画图 2.用…

Ansys Lumerical | 行波马赫曾德尔调制器的仿真设计与优化

说明 本案例将Lumerical和HFSS在行波MZM调制器建模中的功能与optiSLang相结合&#xff0c;提供了强大的优化能力以寻找最佳性能设计。 下载 联系工作人员获取附件 综述 本案例建立在已有的硅波导建模实例&#xff08;Ansys Lumerical 行波 Mach-Zehnder 调制器仿真分析&#x…