Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6763433

list.subList(..).size() throws a ConcurrentModification after list.add(..)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 6
    • core-libs

      FULL PRODUCT VERSION :
      java version "1.6.0_10-beta"
      Java(TM) SE Runtime Environment (build 1.6.0_10-beta-b25)
      Java HotSpot(TM) Client VM (build 11.0-b12, mixed mode, sharing)


      ADDITIONAL OS VERSION INFORMATION :
      Linux riemann 2.6.18.8-0.1-default #1 SMP Fri Mar 2 13:51:59 UTC 2007 i686 athlon i386 GNU/Linux


      A DESCRIPTION OF THE PROBLEM :
      List<Integer> list = new ArrayList<Integer>();
      list.add(0);
      list.add(1);
      list.add(2);
      list.add(3);
      List<Integer> subList = list.subList(0,2);
      list.add(4);
      System.out.println(": "+subList.size());

      yields

      Exception in thread "main" java.util.ConcurrentModificationException
      at java.util.SubList.checkForComodification(AbstractList.java:752)
      at java.util.SubList.size(AbstractList.java:625)
      at eu.simuline.arithmetics.left2right.SumMultArgs1.main(SumMultArgs1.java

      although i think it must not.
      adding elements to the backed list does not modify the sublist
      and in particular not its size.



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      just hack in the code in the description.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      no exception
      ACTUAL -
      Exception in thread "main" java.util.ConcurrentModificationException
      at java.util.SubList.checkForComodification(AbstractList.java:752)
      at java.util.SubList.size(AbstractList.java:625)
      at eu.simuline.arithmetics.left2right.SumMultArgs1.main(SumMultArgs1.java


      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      see above

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      class Test {

          public static void main(String[] args) {
      List<Integer> list = new ArrayList<Integer>();
      list.add(0);
      list.add(1);
      list.add(2);
      list.add(3);
      List<Integer> subList = list.subList(0,2);
      list.add(4);
      System.out.println(": "+subList.size());

          }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :

      i did not find any workaround.

            Unassigned Unassigned
            ndcosta Nelson Dcosta (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: