Ниже предоставлена версия внутреннего метода класса HashMap - transfer из JDK 7. В задаче Shortener нам необходимо будет разобраться в устройстве HashMap и реализовать методы по примеру. Основную идею метода я понимаю, но вот детально реализацию не совсем. Возможно кто-то сможет мне объяснить происходящее подробно.
void transfer(Entry[] newTable) {
Entry[] src = table;
int newCapacity = newTable.length;
for (int j = 0; j < src.length; j++) {
Entry e = src[j];
if (e != null) {
src[j] = null;
do {
Entry next = e.next;
int i = indexFor(e.hash, newCapacity);
e.next = newTable[i];
newTable[i] = e;
e = next;
} while (e != null);
}
}
}
Меня интересует именно перераспределение в цикле do while. Конкретно мне непонятна эта строчка:
e.next = newTable[i];
Что произойдёт, если мы на следующей итерации опять попадём в туже ячейку нового массива? Да и вообще, что если в какой-то другой итерации старого массива мы попадём в занятую ячейку, разве мы не должны добавить его в связный список (сделать так, чтобы находящийся уже в ячейке ссылался на новый)?