posts - 110, comments - 101, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          /**
           * 
           
          */

          package com.test;

          import java.util.ArrayList;
          import java.util.Iterator;
          import java.util.List;
          import java.util.concurrent.CopyOnWriteArrayList;

          /**
           * 
          @author hello_yun
           *
           
          */

          public class ListOperation
          {

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args)
              
          {
                  List
          <Integer> list1 = new ArrayList<Integer>();
                  List
          <Integer> list2 = new CopyOnWriteArrayList<Integer>();
                  list1.add(
          1);
                  list1.add(
          2);
                  list1.add(
          3);
                  
                  list2.add(
          3);
                  list2.add(
          4);
                  
          //        try
          //        {
          //            for(Integer in : list1){
          //                list1.remove(in);//直接循環(huán) 刪除對象會拋異常
          //            }
          //        } catch (Exception e)
          //        {
          //            System.out.println("list1 size : "+list1.size());
          //            System.out.println("循環(huán)list1 異常 : "+e);
          //        }
                  
                  
                  
          for(Integer in : list2){
                      list2.remove(in);
                      System.out.println(
          "list2 : "+list2.size());
                  }

                  
                   
                  
                  list1.add(
          1);
                  list1.add(
          2);
                  
                  list2.add(
          3);
                  list2.add(
          4);
                  
                  
          for (Iterator iterator = list1.iterator(); iterator.hasNext();)
                  
          {
                      iterator.next();
                      iterator.remove();
                  }

                  
                  
                  
          try
                  
          {
                      
          for (Iterator iterator = list2.iterator(); iterator.hasNext();)
                      
          {
                          iterator.next();
                          iterator.remove();
                      }


                  }
           catch (Exception e)
                  
          {
                      System.out.println(
          "copyOnWriteArrayList remove : "+ e);
                  }

                  
                  
          //-------------這種方式 不會拋異常 -------------------------
                  try
                  
          {
                      
          for(int i=0;i<list1.size();i++){
                          list1.remove(i);
                      }


                  }
           catch (Exception e)
                  
          {
                      System.out.println(
          "list1 size : "+list1.size());
                      System.out.println(
          "循環(huán)list1 異常 : "+e);
                  }


              }


          }


          使用 copyOnWriteArrayList時 ,通過 list.remove()方法是安全的 但是使用iterator.remove是會拋異常的
          查看copyOnWriteArrayList源碼 會發(fā)現(xiàn) iterator.remove方法的實現(xiàn)是直接拋異常的
                  /**
                   * Not supported. Always throws UnsupportedOperationException.
                   * @throws UnsupportedOperationException always; <tt>remove</tt>
                   *         is not supported by this iterator.
                   */
                  public void remove() {
                      throw new UnsupportedOperationException();
                  }

          但是通過ArrayList實現(xiàn)時, list.remove會拋異常 java.util.ConcurrentModificationException,
          但是 ArrayList的 iterator.remove不會拋異常




          評論

          # re: list 循環(huán)時 remove方法 異常 與 處理 方式 [未登錄]  回復(fù)  更多評論   

          2015-12-09 11:05 by Young
          使用for(int i=0;i<list1.size();i++)這種形式去remove元素,雖然不會拋異常,但是未能正確的remove元素,最后的list1的size不等于0

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 桂阳县| 改则县| 买车| 河南省| 栾川县| 涞水县| 仁寿县| 孟津县| 巴南区| 襄樊市| 武城县| 桐庐县| 土默特左旗| 海城市| 长宁区| 三都| 拜城县| 安多县| 芜湖市| 河津市| 永德县| 肇源县| 日喀则市| 齐河县| 印江| 浦东新区| 库伦旗| 武宣县| 渭南市| 苏尼特左旗| 安岳县| 玛沁县| 密云县| 英山县| 共和县| 奇台县| 仁布县| 略阳县| 安龙县| 宾阳县| 寿光市|