OpenJDK / lambda / lambda / jdk
changeset 8398:a8da4e516bc3
8005051: optimized defaults for Iterator.forEachRemaining
Reviewed-by: alanb, mduigou, psandoz, ulfzibis
Contributed-by: Akhil Arora <akhil.arora@oracle.com>
author | akhil |
---|---|
date | Tue, 23 Apr 2013 11:54:22 -0700 |
parents | b600d637ef77 |
children | ceeed0fcb371 |
files | src/share/classes/java/util/ArrayList.java src/share/classes/java/util/LinkedList.java src/share/classes/java/util/Vector.java src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java |
diffstat | 4 files changed, 22 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/util/ArrayList.java Thu Apr 25 17:10:36 2013 -0700 +++ b/src/share/classes/java/util/ArrayList.java Tue Apr 23 11:54:22 2013 -0700 @@ -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 <tt>List</tt> interface. Implements * all optional list operations, and permits all elements, including
--- a/src/share/classes/java/util/LinkedList.java Thu Apr 25 17:10:36 2013 -0700 +++ b/src/share/classes/java/util/LinkedList.java Tue Apr 23 11:54:22 2013 -0700 @@ -957,6 +957,7 @@ next = next.next; nextIndex++; } + lastReturned = next; checkForComodification(); }
--- a/src/share/classes/java/util/Vector.java Thu Apr 25 17:10:36 2013 -0700 +++ b/src/share/classes/java/util/Vector.java Tue Apr 23 11:54:22 2013 -0700 @@ -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<? super E> action) { Objects.requireNonNull(action); synchronized (Vector.this) { - final int size = Vector.this.elementCount; + final int size = elementCount; int i = cursor; if (i >= size) { return;
--- a/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java Thu Apr 25 17:10:36 2013 -0700 +++ b/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java Tue Apr 23 11:54:22 2013 -0700 @@ -1059,6 +1059,17 @@ public void add(E e) { throw new UnsupportedOperationException(); } + + @Override + @SuppressWarnings("unchecked") + public void forEachRemaining(Consumer<? super E> 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<? super E> action) { + Objects.requireNonNull(action); + while (nextIndex() < size) { + action.accept(it.next()); + } + } } // Support for resetting lock while deserializing