import java.util.*;
public class bb
{
   private static void test() {
     ArrayList<String> arrayList = new ArrayList<String>();
    
     for(int i = 0; i < 10; i++)     
     arrayList.add("S" + i);
    
    
     List<String> subList = arrayList.subList(0, 5);     
     arrayList.add("o1");
      //subList.add("sb1");
    
     System.out.println("original list size: " + arrayList.size());        
     System.out.println("sub list size     : " + subList.size());   
    }
   public static void main(String args[])
   {
   test();
   }
}subList.add("sb1")怎么不可以使呢,出错,subList.size()这句也出错,高手给看看了Exception in thread "main" java.util.ConcurrentModificationException
at java.util.SubList.checkForComodification(Unknown Source)
at java.util.SubList.size(Unknown Source)
at bb.test(bb.java:16)
at bb.main(bb.java:20)

解决方案 »

  1.   

    这样就不会有问题,但是我说不出原因,arrayList截取后就不能对原来的arrayList更改?import java.util.*;
    public class bb
    {
    private static void test() {
    ArrayList<String> arrayList = new ArrayList<String>();for(int i = 0; i < 10; i++)
    arrayList.add("S" + i);
    List<String> subList = arrayList.subList(0, 5);
    //arrayList.add("o1");
     subList.add("sb1");System.out.println("original list size: " + arrayList.size());    
    System.out.println("sub list size : " + subList.size());    
    }
    public static void main(String args[])
    {
    test();
    }
    }
      

  2.   

    subList返回一个视图,只在原始列表不更改的情况下才能使用
    如果原始列表变动了,增加或删除,或更新元素
    视图就失效了,除非是通过视图进行添加或删除操作有点类似于迭代器。当被迭代的集合变化时,迭代器立即失效。除非是迭代器本身支持的增加或删除操作
      

  3.   

    2楼回答的很好,我刚刚做了这个试验,看了api,调试了一下,同意2楼的看法!
      

  4.   

    我只要其中的几个值,为什么用sublist返回的还是原来的值呢。
      

  5.   

    谢谢,我也学到东西了
    而且对sublist进行删除arrayList 也会被清除