当前位置: 首页 > news >正文

Java中集合元素的删除

关于集合元素的remove

  重点:当集合的结构发生改变时,迭代器必须重新获取,如果还是用以前老的迭代器,会出现异常

  java.util.ConcurrentModificationException

  重点:在迭代集合元素的过程中,不能调用集合对象的remove方法,删除元素c.remove(o);迭代过程中不能这样

 会出现:java.util.ConcurrentModificationException

 重点:在迭代元素的过程中,一定要使用迭代器Iterator的remove方法,删除元素,不要使用集合自带的remove方法删除元素

 import java.util.ArrayList;

 import java.util.Collection;

 import java.util.Iterator;

  public class CollectionTest06{

    public static void main(String[] args){

      //创建集合

      Collection c = new ArrayList();

     //注意:此时获取的迭代器,指向的是那是集合中没有元素状态下的迭代器。

    //一定要注意:集合结构只要发生改变,迭代器必须重新获取

//当集合结构发生了改变,迭代器没有重新获取的时候,调用next()方法是出现异常

  //java.util.ConcurrentModificationException

   //Integer it = c.iterator();

 

     //添加元素

     c.add(1);   //Integer类型

     c.add(2);

     c.add(3);

    //获取迭代器

     Iterator it = c.iterator();

     while(it.hasNext()){

       //编写代码时next()方法返回值类型必须是Object

      //Integer i=it.next();

     Object obj = it.next();

     System.out.println(obj);

     }

     Collection c2 = new ArrayList();

     c2.add("abc");

     c2.add("def");

     c2.add("xyz");

    

    Iterator it2 = c2.iterator();

    while(it2.hasNext()){

        Object o = it2.next();

        //删除元素

       //删除元素之后,集合的结构发生了变化,应该重新去获取迭代器

      //但是,循环下一次的时候并没有重新获取迭代器,所以会出现异常:java.util.ConcurrentModificationException

     //出异常根本原因是:集合中元素删除了,但是没有更新迭代器(迭代器不知道集合变化了)

     // c2.remove(o); //直接通过集合去删除元素,没有通知迭代器(导致迭代器的快照和原集合状态不同)

     //使用迭代器来删除可以吗?

    //迭代器去删除时,会自动更新迭代器,并且更新集合(删除集合中的元素)

      it2.remove();   //删除的一定是迭代器指向的当前元素

      System.out.println(o);

     }

     System.out.println(c2.size()); //0

  

 }

}

http://www.lryc.cn/news/285853.html

相关文章:

  • HNU-数据挖掘-实验2-数据降维与可视化
  • 【shell编程入门】正则表达式
  • 高效火情监测,科技助力森林防火【数字地球开放平台】
  • 第14章_集合与数据结构拓展练习(前序、中序、后序遍历,线性结构,单向链表构建,单向链表及其反转,字符串压缩)
  • WEB前端3D变换效果以及如何应用js代码
  • Linux中的新建用户、切换用户
  • Vue3使用
  • BindingException: Invalid bound statement (not found): xxMapper.deleteBatchIds
  • 开源图床LightPicture搭建本地图片管理系统并实现无公网IP远程访问
  • 黑马苍穹外卖学习Day10
  • [数据结构 - C++] 红黑树RBTree
  • 《WebKit 技术内幕》学习之十(2): 插件与JavaScript扩展
  • 【头歌-数据分析与实践-python】数据分析与实践-python——python基础
  • 【数据库原理】(37)Web与数据库
  • STM32 TIM输出比较、PWM波形
  • React16源码: React中的updateClassComponent的源码实现
  • Mybatis 动态SQL(set)
  • Ubuntu18.04在线镜像仓库配置
  • 多数据源配置H2 Mysql
  • 【ASP.NET Core 基础知识】--路由和请求处理--路由概念(一)
  • 【Unity】RayMarching体积云理论学习
  • 物联网与智慧城市的无界未来:如何打破传统束缚,开启智能生活新篇章
  • nodejs下载安装
  • 从零学Java - Lambda表达式
  • RV1103与FPGA通过MIPI CSI-2实现视频传输,实现网络推流
  • 力扣62. 不同路径
  • 使用Element-Plus 加载style
  • Kafka常见指令及监控程序介绍
  • Docker 仓库管理
  • LeetCode-410.分割数组的最大值