In the Java 7 HashMap
implementation, in the resize
method, it calls transfer
which moves old elements to a new table. Why have they written a new method instead of calling put
with all the old elements? The resize won't be triggered again due to threshold. Calling put
makes the code clearer.
/**
* Transfers all entries from current table to newTable.
*/
void transfer(Entry[] newTable) {
Entry[] src = table;
int newCapacity = newTable.length;
for (int j = 0; j < src.length; j++) {
Entry<K,V> e = src[j];
if (e != null) {
src[j] = null;
do {
Entry<K,V> next = e.next;
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
}