void addEntry(int hash, Long key, String value, int bucketIndex) {
if ((size >= threshold)) {
resize(2 * table.length);
hash = hash(key);
bucketIndex = indexFor(hash, table.length);
}
createEntry(hash, key, value, bucketIndex);
}
А точнее: зачем передавать в конструктор bucketIndex, нигде не использовать это значение, а в итоге просто присвоить ему другое значение?
Жора Нет
39 уровень
Кто-то может объяснить код метода от JavaRush
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Жора Нет
4 мая 2022, 18:25
Ох точно, последний метод вызывается за пределами if. Видимо я ослеп😁
0
Павел Безумный учёный Expert
4 мая 2022, 17:57
Значение bucketIndex используется для создания новой записи (последняя строка тела метода). Но при добавлении записи размер массива table может увеличиться (например, если создаётся новая "корзина"). Когда длина массива вырастает до определённого лимита threshold, происходит расширение: создаётся новый массив, вдвое длиннее прежнего, после чего все элементы из старого массива переносятся в новый. В процессе переноса записи заново перераспределяются по "корзинам", и этот порядок распределения будет отличаться от прежнего: например, "корзина", имеющая в старом массиве индекс 2 может получить в новом массиве индекс 5. В связи с этим после операций расширения/перераспределения (метод resize()) необходимо обновить также значение bucketIndex, чтобы оно соответствовало положению "корзины" в новом, расширенном массиве.
+1