線程中使用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):

    研究中 ......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM