--- a/src/java.base/share/classes/java/util/HashMap.java Fri Feb 08 14:03:09 2019 -0500
+++ b/src/java.base/share/classes/java/util/HashMap.java Fri Feb 08 13:39:22 2019 -0800
@@ -501,9 +501,14 @@
(int)ft : MAXIMUM_CAPACITY);
if (t > threshold)
threshold = tableSizeFor(t);
+ } else {
+ // Because of linked-list bucket constraints, we cannot
+ // expand all at once, but can reduce total resize
+ // effort by repeated doubling now vs later
+ while (s > threshold && table.length < MAXIMUM_CAPACITY)
+ resize();
}
- else if (s > threshold)
- resize();
+
for (Map.Entry<? extends K, ? extends V> e : m.entrySet()) {
K key = e.getKey();
V value = e.getValue();