【列表迭代器和增强for循环】

news2024/12/22 19:32:39

列表迭代器和增强for循环

1.列表迭代器

ListIterator:列表迭代器

  • 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
  • 用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

ListIterator中常用方法

  • E next():返回迭代中的下一个元素

  • boolean hasNext():如果迭代具有更多元素,则返回true

    package com.gather.list;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    public class ListDemo04 {
        public static void main(String[] args) {
            List<String> list=new ArrayList<String>();
            list.add("hello");
            list.add("world");
            list.add("java");
            //通过list集合的listIterator()方法得到
            ListIterator<String> lit = list.listIterator();
            while (lit.hasNext()){
                String s = lit.next();
                System.out.println(s);
            }
            System.out.println(list);
        }
    }
    

在这里插入图片描述

  • E previous():返回列表中的上一个元素

  • boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true

    package com.gather.list;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    public class ListDemo04 {
        public static void main(String[] args) {
            List<String> list=new ArrayList<String>();
            list.add("hello");
            list.add("world");
            list.add("java");
            ListIterator<String> lit = list.listIterator();
            while (lit.hasPrevious()){
                String s = lit.previous();
                System.out.println(s);
            }
            System.out.println(list);
        }
    }
    

在这里插入图片描述

  • void add(E e):将指定的元素插入列表

    package com.gather.list;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    public class ListDemo04 {
        public static void main(String[] args) {
            List<String> list=new ArrayList<String>();
            list.add("hello");
            list.add("world");
            list.add("java");
            ListIterator<String> lit = list.listIterator();
            while (lit.hasNext()){
                String s = lit.next();
                if (s.equals("world")){
                    lit.add("javaee");//将实际修改值赋值给预期修改值,两个值是一致的不会触发并发修改异常
                }
            }
            System.out.println(list);
        }
    }
    

在这里插入图片描述

遍历集合,得到每一个元素,看有没有"world"这个元素,如果有,就添加一个"javaee"元素,此代码中用的是ListIterator中的add()方法添加元素,用此方法不会触发并发修改异常,原因是查看JDK帮助文档中的源码得知,有一行代码表示的是将实际修改值赋值给预期修改值,两个值是一致的所以不会触发并发修改异常

2.增强for循环

增强for:简化数组和Collection集合的遍历

  • 实现Iterable接口的类允许其对象称为增强型for语句的目标
  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器

增强for的格式

  • 格式:

    for(元素数据类型 变量名:数组或者Collection集合){

    ​ //在此处使用变量即可,该变量就是元素

    }

  • 范例:

    int[] arr={1,2,3,4,5};

    for(int i:arr){

    ​ System.out.println(i)

    }

    (1)遍历数组

    package com.gather.list;
    public class ForDemo {
        public static void main(String[] args) {
            int[] arr={1,2,3,4,5};
            for(int i:arr){
                System.out.println(i);
            }
            System.out.println("==========================");
            String[] strArray={"hello","world","java"};
            for (String s:strArray){
                System.out.println(s);
            }
        }
    }
    

在这里插入图片描述

(2)遍历集合

package com.gather.list;
import java.util.ArrayList;
import java.util.List;
public class ForDemo {
    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("hello");
        list.add("world");
        list.add("java");
        for(String s:list){
            System.out.println(s);
        }
    }
}

在这里插入图片描述

3.验证:增强for循环其内部原理是一个Iterator迭代器

package com.gather.list;
import java.util.ArrayList;
import java.util.List;
public class ForDemo {
    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("hello");
        list.add("world");
        list.add("java");
        for (String s:list){
            if (s.equals("world")){
                list.add("javaee");//ConcurrentModificationException
            }
        }

    }
}

运行此代码会发现抛出一个并发修改异常ConcurrentModificationException,这个异常是在Iterator迭代器中修改了元素的长度导致预期修改值和实际修改值不一致,一旦出现这个异常就表明增强for循环内部是一个Iterator迭代器

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

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

相关文章

SAP ABAP smartforms 创建并实现调用源码(下)

SAP ABAP smartforms 创建并实现调用源码&#xff08;上&#xff09; smartforms 入门详见上一篇博文。 一&#xff1a;报表程序调用 smartforms 示例&#xff1a;报表选中一行&#xff0c;将这行机相关数据通过表单打印出来。实际例子:采购订单表&#xff0c;销售订单。 调…

低代码平台iVX

一、ivx是啥 编写复杂的代码仍然是一项具有挑战性的任务。然而&#xff0c;现在有一种令人振奋的解决方案出现了——iVX&#xff0c;这是一种创新的可视化编程语言&#xff0c;为每个人提供快速掌握的能力。 iVX 是一个 “零代码” 的可视化编程语言&#xff0c;“零代码” 是…

基于flask的web应用开发——认识@app.route

目录 0. 前言1. flask简介2. 编写你的第一个网页3. 运行效果查看4. 本节小结 0. 前言 本专栏以基于flask实现web前端&#xff0c;即制作一个自己的网页 本节学习路由装饰器app.route() 操作系统&#xff1a;Windows10 专业版 开发环境&#xff1a;Pycahrm Comunity 2022.3 …

chatgpt赋能python:Python加R:让数据科学更加高效

Python加R&#xff1a;让数据科学更加高效 在过去的几年里&#xff0c;Python和R成为数据科学领域中最受欢迎的编程语言。它们提供了丰富的库和工具&#xff0c;帮助从事数据分析和机器学习的人们更加高效地完成任务。然而&#xff0c;Python和R都有其各自的优缺点。 Python的…

代理IP基础、实际运用,以及如何获取

代理IP是指通过一个中间服务器来转发用户的网络请求&#xff0c;从而在网络上隐藏用户的真实IP地址&#xff0c;或者绕过网络限制以达到访问特定内容的目的。下面是代理IP的一些基础知识&#xff1a; 1、代理IP的分类&#xff1a;代理IP可以分为普匿代理IP、透明代理IP和高匿代…

互联网医院牌照申请的资料以及流程

随着互联网的发展&#xff0c;互联网医院逐渐成为一个热门话题&#xff0c;越来越多的医疗机构开始尝试在互联网上提供医疗服务。然而&#xff0c;想要在互联网上开展医疗服务&#xff0c;必须获得互联网医院牌照。本文将介绍互联网医院牌照申请需要的资料、条件&#xff0c;以…

算法提高-搜索-DFS之剪枝与优化

DFS之剪枝与优化 DFS之剪枝与优化AcWing 165. 小猫爬山AcWing 166. 数独AcWing 167. 木棒AcWing 168. 生日蛋糕 DFS之剪枝与优化 AcWing 165. 小猫爬山 DFS的五种剪枝方法 &#xff08;1&#xff09;优化搜索顺序 &#xff08;2&#xff09;排除等效冗余 &#xff08;3&#…

chatgpt赋能python:Python删除目录:如何在项目中正确删除文件夹?

Python 删除目录&#xff1a;如何在项目中正确删除文件夹&#xff1f; 在使用Python语言进行程序开发的过程中&#xff0c;可能会需要删除不再需要的目录&#xff0c;例如缓存和日志文件夹。然而&#xff0c;删除目录需要小心谨慎&#xff0c;避免误删除重要文件或目录。在本文…

chatgpt赋能python:Python列表自动排序

Python列表自动排序 Python是一种流行的编程语言&#xff0c;它有很多有用的内置函数和数据结构。其中一个最常用的数据结构是列表。在Python中&#xff0c;列表是一个有序的集合&#xff0c;可以存储多种类型的元素。列表不仅仅是一个数据结构&#xff0c;它还有一些有用的方…

Flink standalone 集群会话模式部署搭建

环境准备 1、Centos7集群环境搭建 2、flink-1.17.0-bin-scala_2.12.tgz 安装包&#xff0c;下载地址 规划 服务器角色iphadoop01JobManager TaskManager192.168.140.132hadoop02TaskManager192.168.140.133hadoop03TaskManager192.168.140.134 安装 1、下载 flink-1.17.0-…

【Unity3D】边缘检测特效

1 边缘检测原理 边缘检测的原理是&#xff1a;检测每个像素周围的像素亮度差&#xff0c;如果亮度差异较大&#xff0c;就将该像素识别为边缘&#xff0c;并进行边缘着色。 使用过卷积神经网络&#xff08;CNN&#xff09;的读者&#xff0c;一定知道卷积运算&#xff0c;笔者之…

储能基础知识【一】

储能基础知识【一】 1、基础名词、概念、对应的英文单词、系统组成2、储能电池系统组成图3、性能指标 1、基础名词、概念、对应的英文单词、系统组成 电池储能系统&#xff08;Battery Energy Storage System, BESS&#xff09;&#xff1b;电芯&#xff08;Battery Cell&…

总结887

学习目标&#xff1a; 周目标&#xff1a;强化强3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测&#xff0c;一套数学模拟题 每日必复习&#xff08;5分钟&#xff09; 复习第四讲方程组 学习内容&#xff1a; 暴力英语&#xff1a;背诵《happiness is a journey》每日…

《HTTPS协议原理》

【一】https协议是啥子&#xff1f; https也是一个应用层协议&#xff0c;实在http协议的基础上&#xff0c;引入了一个加密层&#xff0c;http协议的内容都是按照文本的方式进行明文传输的&#xff0c; 这就导致了在传输的过程中出现一些被篡改的情况。 【二】啥是加密&…

操作系统复习3.1.0-内存

内存 程序是由内存放到CPU才可处理&#xff0c;前面一直有提到外存、内存&#xff0c;外存I/O速度十分慢&#xff0c;而内存I/O速度快&#xff0c;CPU I/O速度也快。 因此内存是缓和外存和CPU间I/O速率差异问题 为区分并发环境下程序数据存放地方&#xff0c;就给内存的存储单…

前端 js 栈内存和堆内存 基本数据类型和复杂数据类型的区别?

前端 js 栈内存和堆内存 基本数据类型和复杂数据类型的区别&#xff1f; 先了解一下JavaScript 数据类型有哪些&#xff1f; javaScript 中有8种基本的数据类型&#xff1a;7种为基本数据类型&#xff0c;而Object 为复杂数据类型 基本数据类型&#xff08;原始数据类型&#…

OpenMMLab-AI实战营第二期-人体关键点检测与MMPose

人体关键点检测与MMPose 课程链接&#xff1a;https://www.bilibili.com/video/BV1kk4y1L7Xb 这个课程的大致内容是介绍如何从给定的二维影像中恢复出人体的姿态&#xff08;2D或者3D&#xff09;&#xff0c;大纲如下所示&#xff0c;基本上可以认为流程是&#xff1a;先是恢…

Spring Boot 日志配置(Slf4j)

SLF4J与Logback简介 Java日志框架众多&#xff0c;常用的有java.util.logging, log4j, logback&#xff0c;commons-logging等。 SLF4J (Simple Logging Facade For Java)&#xff0c;它是一个针对于各类Java日志框架的统一Facade抽象。SLF4J定义了统一的日志抽象接口&#x…

Linux命令学习之pwd和ls

pwd pwd是查看当前所在目录的命令。 可以看到当前所在目录是/root。在这里需要注意/是根目录&#xff0c;是所有其他目录的父节点&#xff0c;/root目录是root用户的家&#xff08;home&#xff09;目录&#xff0c;这是两个不同的目录。 man pwd可以看一下pwd的帮助&#xf…

Power BI 如何生成动态指标散点图

前言 本文介绍如何在Power BI中创建动态散点图&#xff0c;可以自由切换X轴和Y轴的指标。 数据下载&#xff1a; 使用的是CSDN后台的单篇文章分析数据&#xff0c;在“作品数据”页点击“导出数据”。 因为都是累计值&#xff0c;所以用了两天的数据&#xff0c;手动添加…