正确处理移除list中数据

C#实现PDF数字签名移除的技术方案 数字签名作为PDF文档安全认证的核心机制,通过非对称加密技术确保文件完整性和签署者身份真实。其技术原理基于PKI体系,在文档中嵌入加密哈希值和数字证书,形成具有法律效力的电子签章。在实际工程中,当遇到合同版本更新、模板复用等场景时,合法合规的签名移除需求尤为突出。通过C#的iTextSharp等PDF处理库,开发者可以精准解析PDF文件结构,定位签名域和签名字典,实现无损的签名删除操作。该技术方案特别适用于金融、法律等需要批量处理签署文档的行业场景,同时需严格遵守AGPL等开源协议要求。 阅读详情

首先大家先看一段代码:

 

public static void main(String[] args) {

      List<String> listStr = new ArrayList<String>();
      listStr.add("1");
      listStr.add("2");
      listStr.add("3");
      listStr.add("4");
      listStr.add("5");

     System.out.println("listStr.size:::"+listStr.size());  

 

      for(String str:listStr){
         if("3".equals(str)){
             listStr.remove(str);  

         }
      }


      System.out.println("listStr.size:::"+listStr.size());

}

 

现象:

      该程序会抛出一个  java.util.ConcurrentModificationException异常。

分析:

      对 Collection 或 Map 进行迭代操作过程中尝试直接修改 Collection / Map 的内容时,会抛出java.util.ConcurrentModificationException 异常。 因为在修改数据时不能同步原有list中数据,当下一次循环时找不到数据。

 

解决办法:

       Iterator 在工作的时候是不允许被迭代的对象被改变的,使用 Iterator 本身的方法 remove() 来删除对
象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。

 

改后代码:

      

public static void main(String[] args) {

      List<String> listStr = new ArrayList<String>();
      listStr.add("1");
      listStr.add("2");
      listStr.add("3");
      listStr.add("4");
      listStr.add("5");
  

 

      System.out.println("listStr.size:::"+listStr.size());

 

      Iterator<String> ite = listStr.iterator();
      while(ite.hasNext()){
          String str = (String)ite.next();
          if("3".equals(str)){
             ite.remove();
          }
      }


      System.out.println("listStr.size:::"+listStr.size());

}

 

补充:

      或许有人可能会问如果我不用增强for循环,直接用.get(index)方法会不会报错?

   代码如下:

      for(int i = 0 ; i < listStr.size(); i++){
           if("3".equals(listStr.get(i))){
               listStr.remove(i);
           }
      }

  现象:

        listStr.size:::5
        listStr.size:::4

        大家可以看到通过list的下表索引来修改list数据是不会出错的。

  分析:

       大家可以这样认为:通过所引来循环时,jvm记录的是所引值,当移除当前对象后,其他元素的索引号不会同步改变。下次循环仍可以找到对应数据。而增强for循环,记录的是当前对象,当下次循环时,会先找到该对象,然后游标向下移,这时候找不到对象所以结果会混乱。

 


 

计算机视觉与图像处理CCF会议全梳理:A/B/C类定位与投稿策略 学术会议是计算机领域研究成果发布与交流的核心载体,而CCF推荐目录作为国内广泛认可的分级标准,为科研人员提供了重要的参考依据。其分级逻辑综合考量领域影响力、学术声誉与录用标准,而非简单依据录取率。理解这一机制,有助于科研新手更高效地规划投稿路径。在计算机视觉与图像处理方向,从CVPR、ICCV等A类顶会到ICIP、BMVC等B/C类会议,不同级别各有侧重与适用场景。结合方向契合度、截稿周期与录用率进行选择,能够显著提升中稿概率,避免因选会失误导致的周期浪费。本文系统梳理该领域CCF A/B/C类会议的核心定 阅读详情

相关推荐

全球、中国各省市县等行政区划(含十段线)shape及geosjon数据免费下载

免费下载全球、中国各省市县等行政区划(含十段线)shape及geosjon数据

mhf403445651的博客 3460

python 列表解析 List Comprehensions 一行创建list 去掉list中每个字符串首尾的字符

列表解析 List Comprehensions 列表解析使创建list更可读 &gt;&gt;&gt; # 创建一个list包含0到9的平方 &gt;&gt;&gt; [x**2 for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] for 可以有0或多个 &gt;&gt;&gt; # 创建一个list包含符合条件的坐标 &g...

weixin_43609275的博客 823

哈工大集合论与图论(下)慕课MOOC答案

答案选自2023哈工大集合论与图论慕课,慕课的题重复率很高并且具有极高的相似性,选答案时要格外注意对比选项,能力有限答案不一定面面俱到,整理不易读者且用且珍惜。

qq_34168477的博客 2904

[py]str list切片-去除字符串首尾空格-递归思想

取出arr的前几项 #方法1 print([arr[0], arr[1]]) #方法2 arr2 = [] for i in range(2): arr2.append(arr[i]) print(arr2) #方法3 -切片 print(arr[:2]) 切片操作 参考 可以操作序列,如str list 取出最后一项 取出第一项 取出前10项 s[:10] 取出后10项 s[-10:...

weixin_30871701的博客 234

WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法

WSL运行make提示/lib//modules/xxx文件或目录不存在。 WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。

weixin_45668903的博客 1万+

利用DRONEKIT-SITL + MAVPROXY + QGroundControl模拟飞行

dronekit: 一种用于无人机控制的python库。 dronekit-sitl:一种本地仿真工具,相当于本地虚拟化了一个无人机。 mavproxy:数据转发软件(类似于插线板的感觉,一个输入,多个相同的输出)。打开一个Anaconda prompt 首先激活相应的环境 然后运行如下命令: 保持2中的Anaconda prompt处于运行状态,另打开一个Anaconda prompt窗口,运行如下命令: tcp:127.0.0.1:5760: SITL默认端口,作为mavproxy的输入,把输入数据转发

Done___的博客 4344

删除list倒数第n个元素

题目:有一个链表,删除倒数第n个节点,并返回该链表的头节点。 例如:由一个链表  1-&gt;2-&gt;3-&gt;4-&gt;5, 设n = 2. 那么删除倒数第二个节点后 就是1-&gt;2-&gt;3-&gt;5.   注意:1.n总是合法的; 2.只遍历一次 链表的结构如下:   public class ListNode { public int val; ...

清风问路 567

fatal: unable to access ‘https://github.com/Stability-AI/stablediffusion.git/‘解决方案

本文主要介绍在安装 stable-diffusion-webui 时出现的 fatal: unable to access 'https://github.com/Stability-AI/stablediffusion.git/': Failed to connect to github.com port 443 after 21071 ms: Couldn't connect to server 问题的解决方案,希望能对你有所帮助。

水滴的博客 5686

List移除元素的四种方式

如果使用iterator的remove方法则会正常,因为iterator的remove方法会在内部调用List的remove方法,但是会修改excepedModCount的值,因此会正常运行。因为遍历过程中进行remove 操作时,该位置后面的元素会挤到前面来,这时候会发生一种情况就是原来元素的位置会被他后面的元素取代,而该位置已经遍历过了,所以该元素不会背遍历。当我们倒序遍历元素的时候,无论删除元素之后的元素怎么移动,之前的元素对应的索引(index)是不会发生变化的,所以在删除元素的时候不会发生问题。

qq_58148854的博客 2万+

AUTOSAR进阶图解==>AUTOSAR_SWS_CANNetworkManagement

本文介绍了AUTOSAR架构中的CAN网络管理(CanNm)模块,主要内容包括: 模块概述:CanNm是协调CAN网络节点状态转换的基础组件,采用去中心化设计,通过周期性发送网络管理PDU保持网络活跃状态,支持网络唤醒、睡眠和部分网络功能。 架构设计:CanNm位于AUTOSAR中间层,连接上层通信管理器(ComM)和底层CAN接口(CanIf),包含状态管理、PDU处理和定时器管理等子组件。 状态机设计:定义了三种主要模式(总线睡眠、准备睡眠和网络模式)及其转换逻辑,网络模式又包含重复消息、正常操作和准备

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2041

PX4从放弃到精通(十一):混控及PWM输出

文章目录前言一、混控脚本二、使用步骤1.引入库2.读入数据总结 前言 一个人可以走的更快,一群人才能走的更远,交流学习加qq:2096723956 更多保姆级PX4+ROS学习视频:https://b23.tv/ZeUDKqy 分享知识,传递正能量,如有疏漏或不当之处,恳请指出. 一、混控脚本 混控脚本定义了不同 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pand

超维空间科技的博客 1万+

list集合的移除方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 list集合的“移除”详解前言一、返回值类型:有2种1、string:返回删除的元素内容2、boolean类型:表示是否删除成功二、remove详解1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、返回值类型:有2种 1、string:返回

心若向阳 无谓悲伤 7589

【用unity实现100个游戏之34】使用环状(车轮)碰撞器(Wheel Collider)从零实现一个汽车车辆物理控制系统,实现一个赛车游戏

本文介绍了在Unity中使用Wheel Collider组件实现3D车辆物理控制系统的详细步骤。主要内容包括: Wheel Collider参数详解:包括基础参数(质量、半径等)、悬挂弹簧系统(弹力、减震等)和摩擦力设置(前向/侧向摩擦曲线)。 准备工作流程: 导入赛车模型、赛道和树木素材 为车身添加Rigidbody和MeshCollider 创建四个Wheel Collider并调整参数(半径、悬挂距离等) 优化摩擦系数设置防止侧滑 实现车辆控制: 通过代码控制车轮前后移动和转向 提供底盘系统设置(四轮

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2658

BEVFormer深度拆解:多相机BEV感知的时空注意力机制

鸟瞰视角(BEV)表示正在成为自动驾驶视觉感知的核心范式,它通过统一的空间坐标系让多相机感知、时序融合与下游规划变得更为直接。BEVFormer是这一方向的代表作,其核心思路是在预定义BEV网格上布置可学习查询,借助可变形注意力从多相机图像中精准采样空间特征,并结合时间自注意力融入历史帧信息。相比依赖深度估计的LSS和稀疏查询的DETR3D,BEVFormer不依赖像素级深度监督,同时输出稠密BEV特征,在nuScenes数据集上mAP显著提升。该设计有效解决了无激光雷达场景下多相机3D目标检测的难点,也为

weixin_34129696的博客 1032

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

正确处理移除list中数据[转]

转自:http://blog.youkuaiyun.com/sysggg/archive/2010/10/22/5959360.aspx 首先大家先看一段代码: public static void main(String[] args) {       List listStr = new ArrayList();       listStr.add("1");       listStr.add("

记录知识经验的空间 560

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

第九章 习题9-21-习题9-30

习题9-21 一样工作?!vector和list工作原理一致; 习题9-22 1、两个迭代器没有“+”运算:mid=iv.begin()+(iv.end()-iv.begin())/2 or mid =iv.begin()+iv.size(); 2、iv.insert()有返回值; 习题9-23 会是c的首元素; 习题9-24 vector<int> vec; ...

weixin_41124748的博客 270

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

list.size()==0与list==null、emptyList

list.size()与list==null的区别 两者的区别是显而易见的,下面这两段就能显示两者差别: List<Integer> list1 = new ArrayList<>(); System.out.println(list1.size());//0 List<Integer> list2 = null; System.out.println(lis...

天乔巴夏丶 2355

循环List移除内容---demo

1 for (int i=0; i<[group.members count]; ++i) { 2 EzPerson *person=[group.members objectAtIndex:i]; 3 if (person.selected&&person.recordId<0) { 4 [db execut...

dazunqu2481的博客 83

C++初阶-list的介绍及使用

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

sushang的博客 1152

学习List接口遇到的巨坑——List接口中的删除操作

当对List中的整型元素进行删除操作时,可能会遇到一个大坑。即直接使用list.remove(想要删除的元素);进行删除。然而直接这样删除不仅没有达到我们想要的效果,还可能会删除了不想删除的元素 例如: public static void main(String[] args) { List list = new ArrayList(); list.add(1); list.add(2); list.add(3); l

lyhd的博客 312

【C++】STL — List的接口讲解 +详细模拟实现

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代

weixin_42976474的博客 1117

C#泛型List删除多个元素的方法

泛型List如果删除一个,很简单,直接 RemoveAt(index)即可。 但如果有多个元素,那么删除起来并不是特别简单。需要使用 for 循环的倒叙删除   例子如下: class Program { public class Students { public string Name { get; set; } ...

chenchen_fcj程序猿的博客 7458

c++:list简介和常见用法总结

1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3.list与forward_list非常相似主要的不同在于forword_list是单链表,只能朝前迭代。与其他的序列是容器相比(array,vector,deque)list通常在任意位置进行插入、移除元素的效率更高。函数说明list()构造空的list。...

qq_62718027的博客 2933

深入探索C++ STL中的list:一份全面指南及实际案例分析

listlist理解list的一个有效方式是自己实现一个基本版本。这个练习可以帮助你深入理解链表的工作原理。list迭代器失效是指某个迭代器在执行某些操作后,指向的元素不再有效。例如,若一个元素被删除或容器的结构发生了变化,迭代器可能会指向一个已经不存在的元素,从而导致程序错误。list。

2406_83947720的博客 2252

#1097. Deduplication on a Linked List【链表】

原题链接 Problem Description: Given a singly linked list LLL with integer keys, you are supposed to remove the nodes with duplicated absolute values of the keys. That is, for each value KKK, only the first node of which the value or absolute value of its key e

geraltofrivia123的博客 175

SVN版本控制彻底移除指南:从原理到实践的安全操作

版本控制系统是软件开发中管理代码变更的核心工具,其原理是通过元数据记录文件历史与状态。SVN作为集中式版本控制的代表,在工作副本中创建.svn目录存储版本信息、文件属性和状态数据。理解这一机制对于技术栈迁移和项目清理至关重要,它能帮助开发者安全剥离版本关联,避免IDE配置冲突和文件属性丢失。在实际工程中,svn export命令提供了最安全的纯净导出方案,而TortoiseSVN等图形化工具则简化了操作流程。无论是从SVN迁移到Git,还是清理遗留工作副本,掌握正确的取消版本控制方法都能提升开发效率,确保代

weixin_30680385的博客 409
下一篇: jquery操作表单,包括常用的radio,checkbox,select
sysggg
博客等级 码龄16年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值