src/java.base/share/classes/java/util/HashMap.java
changeset 53710 49adf961fcb1
parent 52427 3c6aa484536c
child 55391 1afe0cb93482
child 58678 9cf78a70fa4f
--- 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();