Подтвердить что ты не робот

HashMap внутренне использует LinkedList

public V get(Object key) {
if (key == null)
    return getForNullKey();
    int hash = hash(key.hashCode());
    for (Entry<K,V> e = table[indexFor(hash, table.length)];
         e != null;
         e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
            return e.value;
    }
    return null;
}

То, что я знал, если вы хотите получить объект из HashMap, прежде всего, он ищет ведро хэша на основе hashcode/hash, а затем выполняет итерацию через LinkedList в этом хэш-кутке (предположим, что объекты diff имеют один и тот же хэш-код, таким образом, в том же хэш-ведре).

Но после просмотра кода выше, я не могу понять, когда он выполняет итерацию через LinekedList (и где находится LinkedList)

4b9b3361

Ответ 1

Ведро - это связанный список. Массив table представляет собой массив элементов Entry, и каждый Entry является связанным списком, поскольку каждый элемент знает о следующем в списке, пока вы не достигнете конца, когда ссылка next равна нулю, Цикл for, который вы показываете, переименовывается в связанный список.

Это не a LinkedList, как в java.util.LinkedList - это отдельная (более простая) реализация только для карты.

Ответ 2

Он использует связанный список, но не java.util.LinkedList class.

В основном e.next - это то, что вы ищете. Каждая запись имеет ссылку на следующую запись в ведре - это реализация связанного списка.

Ответ 3

e.next - это то, что вы ищете. Каждая запись имеет ссылку на следующую запись в ведре; это реализация связанного списка.