From d95b548c78d2c504ccc3044f434f83e5c8237b0e Mon Sep 17 00:00:00 2001 From: Per Minborg Date: Thu, 12 Oct 2023 07:51:21 +0000 Subject: [PATCH] 8315850: Improve AbstractMap anonymous Iterator classes Reviewed-by: liach, smarks --- .../share/classes/java/util/AbstractMap.java | 52 +++++++------------ 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/src/java.base/share/classes/java/util/AbstractMap.java b/src/java.base/share/classes/java/util/AbstractMap.java index 7a5d92bda52..c5ea53e17db 100644 --- a/src/java.base/share/classes/java/util/AbstractMap.java +++ b/src/java.base/share/classes/java/util/AbstractMap.java @@ -350,23 +350,9 @@ public abstract class AbstractMap implements Map { public Set keySet() { Set ks = keySet; if (ks == null) { - ks = new AbstractSet() { + ks = new AbstractSet<>() { public Iterator iterator() { - return new Iterator() { - private Iterator> i = entrySet().iterator(); - - public boolean hasNext() { - return i.hasNext(); - } - - public K next() { - return i.next().getKey(); - } - - public void remove() { - i.remove(); - } - }; + return new KeyIterator(); } public int size() { @@ -409,23 +395,9 @@ public abstract class AbstractMap implements Map { public Collection values() { Collection vals = values; if (vals == null) { - vals = new AbstractCollection() { + vals = new AbstractCollection<>() { public Iterator iterator() { - return new Iterator() { - private Iterator> i = entrySet().iterator(); - - public boolean hasNext() { - return i.hasNext(); - } - - public V next() { - return i.next().getValue(); - } - - public void remove() { - i.remove(); - } - }; + return new ValueIterator(); } public int size() { @@ -924,4 +896,20 @@ public abstract class AbstractMap implements Map { public T[] toArray(T[] a) { return view().toArray(a); } public String toString() { return view().toString(); } } + + // Iterator implementations. + + final class KeyIterator implements Iterator { + private final Iterator> i = entrySet().iterator(); + public boolean hasNext() { return i.hasNext(); } + public void remove() { i.remove(); } + public K next() { return i.next().getKey(); } + } + + final class ValueIterator implements Iterator { + private final Iterator> i = entrySet().iterator(); + public boolean hasNext() { return i.hasNext(); } + public void remove() { i.remove(); } + public V next() { return i.next().getValue(); } + } }