zoukankan      html  css  js  c++  java
  • 线程中使用for循环的add或remove方法的两种方案

    • 简介 (Introduction):

      • 背景
        在使用线程中添加list的元素时,使用add或remove就会产生异常.

      • 分析
        该list每当删除/添加一个元素时,集合的size方法的值都会减小1,这将直接导致集合中元素的索引重新排序,进一步说,就是剩余所有元素的索引值都减一,而for循环语句的局部变量i扔然在递减,这将导致删除/添加操作发生跳跃,从而都是删除或增加的问题.

      • 快速上手(Getting Started)

        方法一:
        list转化为iterator

        1 Iterator<String> iterator = stringList.iterator();
        View Code

         测试:

         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         }
        View Code

        方法二:
        逆向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         }
        View Code
    • 环境设置 (Prerequisite):

      • 环境
        JDK1.8
      • 配置
        IDEA 2019
      • 存在问题
        暂无

    • 进阶篇 (Advanced):

      研究中 ......

  • 相关阅读:
    SpringMVC的自定义校验器
    Spring 国际化 异常:No message found under code 'message' for locale 'zh_CN'.
    《Redis实战》学习实践
    博客系统开发问题
    牛人博客
    Lambda表达式
    红黑树
    配置mysql的主从复制
    mysql 存储过程入门
    一个稍复杂的mysql存储过程
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/13342030.html
Copyright © 2011-2022 走看看