• 简介 (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方法的两种方案的更多相关文章

  1. TMsgThread, TCommThread -- 在delphi线程中实现消息循环

    http://delphi.cjcsoft.net//viewthread.php?tid=635 在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使 ...

  2. TMsgThread, TCommThread -- 在delphi线程中实现消息循环(105篇博客,好多研究消息的文章)

    在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供.   花了两天的事件研究了 ...

  3. Looper.loop() android线程中的消息循环

    Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Loope ...

  4. java线程中的sleep/wait/notify/yield/interrupt方法 整理

    java线程中的sleep/wait/notify/yield/interrupt方法 sleep 该方法能够使当前线程休眠一段时间 休眠期间,不释放锁 休眠时间结束之后,进入可执行状态,加入到线程就 ...

  5. 在Activity中响应ListView内部按钮的点击事件的两种方法!!!

    在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...

  6. [置顶] 有关ListIterator接口的add与remove方法探究

    ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...

  7. [转]有关ListIterator接口的add与remove方法探究

    原文地址: http://www.java123.net/v/492971.html 应用案例: http://820199753.iteye.com/blog/2230032 ListIterato ...

  8. (网页)angular中实现li或者某个元素点击变色的两种方法(转)

    转自脚本之家: 本篇文章主要介绍了angular中实现li或者某个元素点击变色的两种方法,非常具有实用价值,需要的朋友可以参考下 本文介绍了angular中实现li或者某个元素点击变色的两种方法,分享 ...

  9. SQL Server中灾难时备份结尾日志(Tail of log)的两种方法

    转自:http://www.cnblogs.com/CareySon/archive/2012/02/23/2365006.html SQL Server中灾难时备份结尾日志(Tail of log) ...

  10. List 重载添加-add,删除-remove方法,以及获取子集方法

    package seday12; import java.util.ArrayList;import java.util.List; /*** @author xingsir* List重载了一对ad ...

随机推荐

  1. #dp#洛谷 2679 子串

    题目 有两个仅包含小写英文字母的字符串 \(A\) 和 \(B\). 现在要从字符串 \(A\) 中取出 \(k\) 个互不重叠的非空子串,然后把这 \(k\) 个子串按照其在字符串 \(A\) 中出 ...

  2. SQL 的 AND、OR 和 NOT 运算符:条件筛选的高级用法

    AND 运算符 SQL的AND运算符用于根据多个条件筛选记录,确保所有条件都为TRUE才返回记录.下面是AND运算符的基本语法: SELECT column1, column2, ... FROM t ...

  3. DEB打包教程

    一.deb简介 deb是一种安装包的格式,linux上常见的安装包主要是deb.rpm 二.deb简单使用 # deb安装 sudo dpkg -i webcamera_1.0_amd64.deb # ...

  4. Python基于Excel数据加以反距离加权空间插值并掩膜图层

      本文介绍基于Python中ArcPy模块,实现Excel数据读取并生成矢量图层,同时进行IDW插值与批量掩膜的方法. 1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个记录有 ...

  5. SpringBoot+阿里云OCR图片识别

    准备条件:阿里云OCR图片识别API购买,初次购买1分钱500次接口调用 一.控制层 @GetMapping("/uploadManual") @ApiOperation(&quo ...

  6. javascript现代编程系列教程之七——字符数据类型-字符集-编码解码-常用字符串处理方法(七)

    一.字符集 Unicode:Unicode 是一个字符集(Charset),包含了世界上所有的字符.每个字符在 Unicode 中都有其唯一对应的数字编号,这就是我们常说的 Unicode 码. UT ...

  7. OceanBase初体验之从MySQL迁移数据到OceanBase集群

    前置条件 MySQL 环境 OceanBase 环境 测试用的表结构和一些数据 先在源端 MySQL 用如下脚本创建测试表,以及写入10000条数据用于迁移测试. use test; CREATE T ...

  8. 当 AI 邂逅绘画艺术,能迸发出怎样的火花?

    简介: 2021年初,OpenAI 团队发布了能够根据文本描述生成图像的 DALL-E 模型.由于其强大的跨模态图像生成能力,引起自然语言和视觉圈技术爱好者的强烈追捧.仅仅一年多的时间,多模态图像生成 ...

  9. 小米电商 Apache Dubbo-go 微服务实践

    ​简介:2021 年是小米中国区电商部门变动调整较大的一年,小米中国区早期电商.服务体系建立在 Go 语言构建的微服务体系之上,由内部自研的 Go 语言微服务框架 koala 支撑起数以千计的微服务应 ...

  10. N个技巧,编写更高效 Dockerfile|云效工程师指北

    简介:云原生时代下软件的构建和部署离不开容器技术.提到容器,几乎大家下意识都会联想到 Docker .而 Docker 中有两个非常重要的概念,一个是Image(镜像),一个是Container(容器 ...