List在使用迭代器遍历异常情况

List三种遍历方式 List三种遍历方式 ArrayList、LinkedList、Vector三种集合遍历 方式一:iterator迭代器遍历list //iterator迭代器遍历 Iterator iterator = list.iterator(); //快速生成快捷键 itit while (iterator.hasNext()) { //判断迭代器是否为空 Object next = iterator.next(); //指针,获取数据 System.out.pr... 阅读详情

补充一下ArrayaList中的内容;
注意:千万不然在使用迭代器遍历集合元素的时候利用集合对象删除元素的方法,否则会出现
java.util.ConcurrentModificationException异常,

@Test
public void m5() {
    List Ary = new ArrayList();
    Ary.add(0, "西瓜");//add()方法是无返回值类型的方法
    Ary.add(1, "葡萄");
    Ary.add(2, "柠檬");
    System.out.println("----------测试迭代器报错----------");
    //需要注意的是,不要在使用迭代器遍历集
    // 合元素的同时用集合对象方法去删除元素,否则会报错
    //拿到Ary的迭代器
    Iterator iterator1 = Ary.iterator();
    while (iterator1.hasNext()) {
        Object o = iterator1.next();
        System.out.println("当前元素是:" + o);
        Ary.remove(o);
    }
    System.out.println(Ary.size());
}


以下特殊形式的for循环时一样的异常结果:

```java
System.out.println(Ary.size());
for (Object o:Ary){
    System.out.println(Ary.remove(o));
}
``

在这里插入图片描述

在这里插入图片描述

但是以下方式并没有报错:
@Test
public void m5() {
List Ary = new ArrayList();
Ary.add(0, “西瓜”);//add()方法是无返回值类型的方法
Ary.add(1, “葡萄”);
Ary.add(2, “柠檬”);
System.out.println("----------测试迭代器报错----------");
//需要注意的是,不要在使用迭代器遍历集
// 合元素的同时用集合对象方法去删除元素,否则会报错
//拿到Ary的迭代器
Iterator iterator1 = Ary.iterator();
while (iterator1.hasNext()) {
System.out.println(“当前元素是:” + iterator1.next());
Ary.remove(iterator1.next());
}
System.out.println(Ary.size());
}

在这里插入图片描述
我们可以通过使用:

    //需要注意的是,不要在使用迭代器遍历集
    // 合元素的同时用集合对象方法去删除元素,否则会报错
    //拿到Ary的迭代器
    Iterator iterator1 = Ary.iterator();
    while (iterator1.hasNext()) {
        Object o = iterator1.next();
        System.out.println("当前元素是:" + o);
        iterator1.remove();
    }
    System.out.println(Ary.size());//迭代器可以改变集合中的元素
}

在这里插入图片描述

List的迭代器 引自"C++ primer plus 6"中的话: 理解迭代器是理解STL的关键所在。 模板使得算法独立于存储的数据类型,而迭代器使算法独立于使用的容器类型。 因此,它们都是STL通用方法的重要组成部分。 一直觉得迭代器很神秘,在调试了简单的List迭代器之后,才认识到迭代器实质上就是遍历访问容器里面的元素。不同的容器,它的遍历方式不同,迭代器也就各不相同。 数组下标的移动和指针的++就 阅读详情

相关推荐

STM32F103C8T6最小系统板GPIO配置避坑指南:从原理图到流水灯一次成功

本文详细介绍了STM32F103C8T6最小系统板GPIO配置的实战指南,从硬件准备到流水灯实现,涵盖了九大关键步骤。特别针对新手常见问题,如GPIO配置、开发环境搭建和程序下载调试,提供了详细的解决方案和避坑技巧,帮助开发者快速掌握STM32开发基础。

weixin_33756596的博客 340

list介绍和list的迭代器失效

一.list使用 1.1 list介绍 list底层是一个双向链表结构,每一个结点由三个成员变量组成。一个成员变量保存元素值,一个成员变量为一个指针保存上一个结点的地址,一个成员变量也是指针保存下一个结点的地址。 1.2 特点 list可以在常数时间范围内在任意位置进行插入和删除的序列式容器,因为不需要挪动数据。并且该容器可以前后双向迭代。与其它容器(array,vector,deque)相比,在任意位置插入删除效率更好。 list与forward_...

weixin_57023347的博客 1843

STM32F103C8T6通过ESP8266连接阿里云物联网平台(附代码)

STM32F103C8T6连接阿里云物联网平台(1)—阿里云lot Studio控制 Web开发 分享一下自己使用stm32f103c8t6通过ESP_01模块连接阿里云物联网平台,实现温湿度上传和控制命令下达的过程,能力有限,用的是最简单的方法,如有错误,多多担待。 一、硬件选型 1、 stm32f103c8t6 2、ESP_01 wifi模块 3、其他 二、硬件连接 WSP_01 STM32F103C8T6 RXD PA2 TXD PA3 RES PA4 VCC 3.3

weixin_A13253323604 3万+

list最常用的遍历五种方式以及使用场景

迭代器遍历 :在遍历过程中需要删除元素,请使用迭代器 列表迭代器: 在遍历过程中需要添加元素,请使用列表迭代器 增强for遍历: 仅仅需要遍历 lambda表达式:仅仅需要遍历 普通for: 如果便利的时候想操作索引,可以使用普通for

adru的博客 5768

Diffix3D+复现

上下载模型,将其放在一个目录中,并将目录名填在demo代码中from_pretrained的cache_dir参数里。目录结构应该是"<PATH>/nvidia/difix/…给的requirements文件中pytorch和xformers的版本没有指定,这里测试过以下版本,可以成功运行。将readme中的demo代码新建一个python脚本复制进去,然后将脚本放在src目录中运行。如果遇到网络问题无法加载huggingface上的预训练模型,可以手动从。如果出现,以下错误重新。

NeverMakeIt的博客 1085

Raspberry Pi Pico SDK开发-Timer-定时

RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 本实例将演示如何使用Timer的定时功能。

视觉与物联智能 2040

List集合的五种遍历方式

一、List五种遍历方式 1、普通for遍历 2、 增强for遍历 3、Lambda表达式 4、迭代器遍历 5、列表迭代器

qi341500的博客 6515

QNX侧触摸屏(TP)Bringup流程与源码深度解析

QNX侧TP Bringup的核心在于构建。

QQ_778132974的博客 477

【Java集合进阶】list常见的方法和五种遍历方式&数据结构

后进先出,先进后出。队列:先进先出,后进后出。数组:内存连续区域,查询快,增删慢。链表:元素是游离的,查询慢,首尾操作极快。

人若无名,便可专心练剑 3554

13、7自由度机械臂混合逆运动学算法解析

本文介绍了一种针对7自由度机械臂的混合逆运动学算法,通过引入额外参数Φ解决冗余自由度问题,并实现了避障、避免关节超限和扩大工作空间。该方法采用解析逆运动学求解策略,克服了机械臂在奇异位姿时的配置不连续性问题。通过对比实验验证了该算法在腕部关节角度连续性和位姿可达性方面的优越性,同时结合躯干逆运动学显著扩展了机械臂的工作空间。

rgv23456789的博客 236

CAN轴控制流【6041,6040】

【代码】CAN轴控制流【6041,6040】

cfqq1989的博客 1782

迭代器的使用方法与例子

/it3.next()//NoSuchElenentException没有这个元素迭代器移过头了。//迭代器的使用场景:map,list,set都可以使用迭代器来遍历。//next():得到当前的元素,并把迭代器向后移动一个位置。//take:从当前的迭代器的位置开始,取n个元素。//1.创建一个迭代器(iterator)//任务:跳过前两个,从第三个开始输出。//只输出4,5,6跳过前三个,再取3个。//hasNext()是否有下一个。//任务:输出每一个元素。//任务:打印前三个。

rylshe1314的博客 483

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

探索List和Map循环遍历删除问题

通过源码解读Java中List和Map循环遍历导致的删除问题。 前言 Java代码写的其实不多,上周写List和Map的遍历,需要删除里面的元素时,直接就抛出异常,因为接触Java时间并不长,这种方式之前也很少使用,所以感觉这里肯定有坑,然后Java对List和Map的遍历方式也是五花八门,今天想花点时间研究了一下。 问题引入 我们先看List的4种遍历情况,你看哪种会有问题: List<String> platformList = new ArrayList<>().

q1472750149的博客 1498

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

普通for循环遍历List时调用remove方法,List没有遍历完。为什么?

list集合有个特点,比如说一个list里面有三个元素a,b,c,对应的索引分别是0,1,2。当调用remove(0)时,list会移除a这个元素,这个时候list里面的元素就变成b,c,对应的索引值分别为0,1。这个时候list的size已经变成了2,但是如楼主的for循环的话,循环的上限还是最开始的list的size值,也就是3。如此下去每移除一个元素的时候,list的索引取值范围都会变小,最...

别抢我蓝buff 637

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

设计模式16:迭代器模式

迭代器模式(Iterator Pattern)有叫做游标(Cursor)。 迭代器模式在jdk中,List.java Collection.java接口里,都有抽象方法: Iterator<E> iterator(); 迭代器的作用 普通的fori循环, 只能遍历list,不能遍历Collection 普通的for循环,如果在循环内部做删除操作,易出错,且危险。 未完待续。 参考:Iterator vs for ...

知道这个有什么用? 159

迭代器Iterator

package cn.test.collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /* * -----|Collection 单例集合的根接口 * --------|List 实现List接口的话 有序 可重复 * --------|Set 实现Set

AaronWang0920的博客 386

关于list删除的问题

最近做东西遇见一个很简单的小问题,就是在遍历list 的时候,如果使用增强的for循环删除list中的变量或者是使用迭代器循环但是使用list.remove(iterator.next())都会抛出异常。

qq_37447018的博客 362

【C++】深入理解自定义 list 容器中的 list_iterator:迭代器实现详解

通过,我们实现了自定义list容器的标准遍历方式。总结封装节点指针通过持有list_node指针_node来访问和移动链表节点。重载操作符和->用于访问节点数据。++和--用于迭代器的前进和后退。==和!用于迭代器的比较。与listlist_node的关系依赖list_node实现节点移动和数据访问。list通过提供统一的接口,使链表可以通过迭代器进行遍历、插入和删除操作。通过,自定义的list容器具备了与 STL 容器一致的遍历能力,使链表在不连续内存结构中也可以支持标准的迭代器操作。

weixin_74837455的博客 4446

【C++】list 的使用及迭代器底层详解

详细讲解了 list 迭代器的底层实现,充分展示了其与string、vector迭代器的不同

HDSTQTW的博客 1480

Java遍历List集合for循环,foreach,迭代器的区别

遍历List集合的三种方式 List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的遍历集合方法就可以大大提高我们开发的效率,适当使用各种方法才会使我们开发事半功倍。   我总结了三种List集合的遍历方式,下面一一来介绍。 首先创建一个集合 ArrayList<String> names = new ArrayList<String>(); ...

weixin_45376741的博客 7417

迭代器Iterator的使用 遍历List,Set,Map

迭代器iterator的使用 遍历List,Set,Map 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。 Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterat...

kali_Chenye的博客 1214

用迭代器Iterator遍历List, Set ,Map

package 容器集合; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; impo...

qq_43407321的博客 1150

【Java】List集合的遍历方式

在正式学习之前,我们先来回忆一下刚刚说过的话:List继承于Collection,因此在Collection中所有的方法在List里面都是可以使用的。我们在Collection中讲解了三种遍历方式,这三种遍历方式在List集合中也是可以使用的,但是在这些的基础上,它还有自己单独的方式。forEach方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素,并把每一个元素传递给下面的accept方法。添加,因为在用迭代器遍历集合的过程中,不能使用集合的方法 删除 / 添加。

qq_39921135的博客 5589

【C++第十课 - List】List的使用、list底层实现、list的const迭代器实现、反向迭代器

list不能用算法库里面的sort,算法库里面的sort是快排(需要连续的空间,原地排序,不稳地排序,O(n2)),list自带的sort是归并(稳定排序,O(nlogn))(2)访问权限:struct默认的成员变量访问控制权限是public,而class默认的成员变量访问权限则为private。把一个链表的值转移到另一个链表,是把一个链接里面的节点直接拿走。是内置类型,是要改变的是Node*的指向,不能改变指针的运算符。默认的析构函数对类里面的成员是不做处理的。

m0_60803455的博客 1408

java中List集合遍历和迭代器遍历

java中List集合遍历和迭代器遍历

醉墨涵湫的博客 1万+
上一篇: Java中List实现方法的ArrayList与LinkedList的区别
下一篇: 集合框架——泛型机制的使用
惠溪崽崽
博客等级 码龄7年 4粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值