--- old/src/share/classes/java/util/LinkedHashMap.java 2012-05-24 12:15:21.000000000 -0700 +++ new/src/share/classes/java/util/LinkedHashMap.java 2012-05-24 12:15:21.000000000 -0700 @@ -236,6 +236,7 @@ * readObject) before any entries are inserted into the map. Initializes * the chain. */ + @Override void init() { header = new Entry<>(-1, null, null, null); header.before = header.after = header; @@ -246,9 +247,12 @@ * by superclass resize. It is overridden for performance, as it is * faster to iterate using our linked list. */ - void transfer(HashMap.Entry[] newTable) { + @Override + void transfer(HashMap.Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; for (Entry e = header.after; e != header; e = e.after) { + if (rehash) + e.hash = (e.key == null) ? 0 : hash(e.key); int index = indexFor(e.hash, newCapacity); e.next = newTable[index]; newTable[index] = e; @@ -420,15 +424,12 @@ * removes the eldest entry if appropriate. */ void addEntry(int hash, K key, V value, int bucketIndex) { - createEntry(hash, key, value, bucketIndex); - - // Remove eldest entry if instructed, else grow capacity if appropriate + super.addEntry(hash, key, value, bucketIndex); + + // Remove eldest entry if instructed Entry eldest = header.after; if (removeEldestEntry(eldest)) { removeEntryForKey(eldest.key); - } else { - if (size >= threshold) - resize(2 * table.length); } }