线程中使用for循环的add或remove方法的两种方案
简介 (Introduction):
背景
在使用线程中添加list的元素时,使用add或remove就会产生异常.分析
该list每当删除/添加一个元素时,集合的size方法的值都会减小1,这将直接导致集合中元素的索引重新排序,进一步说,就是剩余所有元素的索引值都减一,而for循环语句的局部变量i扔然在递减,这将导致删除/添加操作发生跳跃,从而都是删除或增加的问题.快速上手(Getting Started)
方法一:
list转化为iterator
1 Iterator<String> iterator = stringList.iterator();
测试:

1 String[] strings = {"A","B","C","D"};
2
3 List<String> stringList = new ArrayList<>();
4
5 Iterator<String> iterator = stringList.iterator();
6
7
8 while (iterator.hasNext()) {
9
10 String next = iterator.next();
11
12 if(next.equals(strings[0])){
13 iterator.remove();
14 }
15
16 }方法二:
逆向for循环
1
2 List<String> stringList = new ArrayList<>();
3
4 for (int i = stringList.size() - 1; i > -1; i--) {
5
6 stringList.add("E");
7 }
环境设置 (Prerequisite):
- 环境
JDK1.8 - 配置
IDEA 2019 存在问题
暂无
- 环境
进阶篇 (Advanced):
研究中 ......
线程中使用for循环的add或remove方法的两种方案的更多相关文章
- TMsgThread, TCommThread -- 在delphi线程中实现消息循环
http://delphi.cjcsoft.net//viewthread.php?tid=635 在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使 ...
- TMsgThread, TCommThread -- 在delphi线程中实现消息循环(105篇博客,好多研究消息的文章)
在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供. 花了两天的事件研究了 ...
- Looper.loop() android线程中的消息循环
Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Loope ...
- java线程中的sleep/wait/notify/yield/interrupt方法 整理
java线程中的sleep/wait/notify/yield/interrupt方法 sleep 该方法能够使当前线程休眠一段时间 休眠期间,不释放锁 休眠时间结束之后,进入可执行状态,加入到线程就 ...
- 在Activity中响应ListView内部按钮的点击事件的两种方法!!!
在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...
- [置顶] 有关ListIterator接口的add与remove方法探究
ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...
- [转]有关ListIterator接口的add与remove方法探究
原文地址: http://www.java123.net/v/492971.html 应用案例: http://820199753.iteye.com/blog/2230032 ListIterato ...
- (网页)angular中实现li或者某个元素点击变色的两种方法(转)
转自脚本之家: 本篇文章主要介绍了angular中实现li或者某个元素点击变色的两种方法,非常具有实用价值,需要的朋友可以参考下 本文介绍了angular中实现li或者某个元素点击变色的两种方法,分享 ...
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
转自:http://www.cnblogs.com/CareySon/archive/2012/02/23/2365006.html SQL Server中灾难时备份结尾日志(Tail of log) ...
- List 重载添加-add,删除-remove方法,以及获取子集方法
package seday12; import java.util.ArrayList;import java.util.List; /*** @author xingsir* List重载了一对ad ...
随机推荐
- #平衡树#洛谷 1110 [ZJOI2007]报表统计
题目 分析 最小值只需要开两棵平衡树,一棵维护所有元素,一棵维护相邻最小值, 对于全局最小值,对于每次插入查找前驱后继更新最小值即可, 相邻最小值,对于每个原数列的数维护它的开头和结尾是什么数, 然后 ...
- OpenHarmony装饰指定自定义组件:@BuilderParam装饰器
当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作.若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能.为解决此问题,ArkUI ...
- 直播预告丨Hello HarmonyOS进阶课程第二课——计算机视觉
为了帮助初识HarmonyOS的开发者快速入门,我们曾推出Hello HarmonyOS系列一共5期课程,从最基础的配置IDE和创建Hello World开始,详细介绍HarmonyOS基础.开发环境 ...
- 进阶 stack smashing--canary 报错利用 && environ泄露栈地址
进阶 stack smashing--canary 报错利用 && environ泄露栈地址 这部分是对进阶stack smashing的使用,以及对 environ的认识,我们可以看 ...
- centos8 \CentOS 9 Stream rpm 安装mysql8.0.28
centos8 rpm 安装mysql8.0.28 检查 检测系统是否自带安装 MySQL 命令如下: rpm -qa | grep mysql 如果如下存在已安装的包,就需要卸载 mysql80-c ...
- Centos 6.4 配置网页服务器
Centos 6.4 配置网页服务器 (2013-08-08 22:59:09) 转载▼ 分类:linux系统 今天值班,在单位找一台电脑安装了Centos 6.4操作系统. 一.安装软件 yum ...
- threading的定时器模块,python,每间隔一段时间执行一次任务
工作中常有一些定时任务要处理,比如使用百度的接口,它的access_token是一个更新一次的,每次使用时总是请求会很慢,所以我们把它保存起来,用定时器模块,定时在过期之前请求一次,或者定时数据同步, ...
- 超大福利 | 这款免费 Java 在线诊断利器,不用真的会后悔!
线上系统为何经常出错?数据库为何屡遭黑手?业务调用为何频频失败?连环异常堆栈案,究竟是哪次调用所为? 数百台服务器意外雪崩背后又隐藏着什么?是软件的扭曲还是硬件的沦丧? 走进科学带你了解 Arthas ...
- 优化搜索排序结果从而“ 提升CTR、CVR业务指标”
简介: 搭建搜索功能不难,难的是如何提高搜索质量,帮助用户快速找到心中所想的内容或商品,那么搜索结果的相关性排序则是影响用户体验最关键的一环,本文通过阿里云开放搜索电商行业解决方案和大家聊一聊如何优化 ...
- IT人的年夜饭,也太香了吧
简介: 平时的IT人,奋战在修复bug前线,起早与贪黑齐飞,调休共假期待定.到了新春佳节,对于IT人来说,没有什么是比一顿年夜饭更让人熨贴肺腑的了.为了让废寝忘食编程序.闻机起早保运维的IT人过一个 ...