changeset 8402:643cd3b39b02

remove after forEachRemaining should remove last element
author akhil
date Thu, 25 Apr 2013 21:38:34 -0700
parents 9c709039c43d
children 507c7f5e073d
files src/share/classes/java/util/ArrayList.java src/share/classes/java/util/LinkedList.java src/share/classes/java/util/Vector.java test/java/util/Iterator/IteratorDefaults.java
diffstat 4 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/util/ArrayList.java	Thu Apr 25 18:54:57 2013 -0700
+++ b/src/share/classes/java/util/ArrayList.java	Thu Apr 25 21:38:34 2013 -0700
@@ -874,7 +874,8 @@
                 consumer.accept((E) elementData[i++]);
             }
             // update once at end of iteration to reduce heap write traffic
-            lastRet = cursor = i;
+            cursor = i;
+            lastRet = i - 1;
             checkForComodification();
         }
 
--- a/src/share/classes/java/util/LinkedList.java	Thu Apr 25 18:54:57 2013 -0700
+++ b/src/share/classes/java/util/LinkedList.java	Thu Apr 25 21:38:34 2013 -0700
@@ -954,10 +954,10 @@
             Objects.requireNonNull(action);
             while (modCount == expectedModCount && nextIndex < size) {
                 action.accept(next.item);
+                lastReturned = next;
                 next = next.next;
                 nextIndex++;
             }
-            lastReturned = next;
             checkForComodification();
         }
 
--- a/src/share/classes/java/util/Vector.java	Thu Apr 25 18:54:57 2013 -0700
+++ b/src/share/classes/java/util/Vector.java	Thu Apr 25 21:38:34 2013 -0700
@@ -1172,7 +1172,8 @@
                     action.accept((E) elementData[i++]);
                 }
                 // update once at end of iteration to reduce heap write traffic
-                lastRet = cursor = i;
+                cursor = i;
+                lastRet = i - 1;
                 checkForComodification();
             }
         }
--- a/test/java/util/Iterator/IteratorDefaults.java	Thu Apr 25 18:54:57 2013 -0700
+++ b/test/java/util/Iterator/IteratorDefaults.java	Thu Apr 25 21:38:34 2013 -0700
@@ -240,6 +240,11 @@
             assertEquals(iterator.nextIndex(), data.length);
             assertEquals(iterator.previousIndex(), data.length - 1);
 
+            // CopyOnWriteArrayList.listIterator().remove() is unsupported
+            if (!"java.util.concurrent.CopyOnWriteArrayList".equals(listClass)) {
+                iterator.remove(); // should delete the last element, not throw
+            }
+
             try {
                 iterator.next();
                 fail(listClass + " iterator advanced beyond end");