# HG changeset patch # User akhil # Date 1366743262 25200 # Node ID bc8c3afa21fe8c4ba67b05284ec9bd9f93bcaef5 # Parent b456f25c20752882f3954ff5cd2dde7c8361dad3 [mq]: iterator diff --git a/src/share/classes/java/util/ArrayList.java b/src/share/classes/java/util/ArrayList.java --- a/src/share/classes/java/util/ArrayList.java +++ b/src/share/classes/java/util/ArrayList.java @@ -29,10 +29,6 @@ import java.util.function.Predicate; import java.util.function.UnaryOperator; -import java.util.function.Consumer; -import java.util.function.Predicate; -import java.util.function.UnaryOperator; - /** * Resizable-array implementation of the List interface. Implements * all optional list operations, and permits all elements, including diff --git a/src/share/classes/java/util/LinkedList.java b/src/share/classes/java/util/LinkedList.java --- a/src/share/classes/java/util/LinkedList.java +++ b/src/share/classes/java/util/LinkedList.java @@ -957,6 +957,7 @@ next = next.next; nextIndex++; } + lastReturned = next; checkForComodification(); } diff --git a/src/share/classes/java/util/Vector.java b/src/share/classes/java/util/Vector.java --- a/src/share/classes/java/util/Vector.java +++ b/src/share/classes/java/util/Vector.java @@ -29,8 +29,6 @@ import java.util.function.Predicate; import java.util.function.UnaryOperator; -import java.util.function.Consumer; - /** * The {@code Vector} class implements a growable array of * objects. Like an array, it contains components that can be @@ -1161,7 +1159,7 @@ public void forEachRemaining(Consumer action) { Objects.requireNonNull(action); synchronized (Vector.this) { - final int size = Vector.this.elementCount; + final int size = elementCount; int i = cursor; if (i >= size) { return; diff --git a/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java b/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java --- a/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java +++ b/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java @@ -1059,6 +1059,17 @@ public void add(E e) { throw new UnsupportedOperationException(); } + + @Override + @SuppressWarnings("unchecked") + public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); + final int size = snapshot.length; + for (int i=cursor; i < size; i++) { + action.accept((E) snapshot[i]); + } + cursor = size; + } } /** @@ -1367,6 +1378,15 @@ public void add(E e) { throw new UnsupportedOperationException(); } + + @Override + @SuppressWarnings("unchecked") + public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); + while (nextIndex() < size) { + action.accept(it.next()); + } + } } // Support for resetting lock while deserializing