Ниже предоставлена версия внутреннего метода класса 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];
Что произойдёт, если мы на следующей итерации опять попадём в туже ячейку нового массива? Да и вообще, что если в какой-то другой итерации старого массива мы попадём в занятую ячейку, разве мы не должны добавить его в связный список (сделать так, чтобы находящийся уже в ячейке ссылался на новый)?