2013-09-09 3 views
0

Я пытаюсь понять внутреннюю работу linkedhashmap.Как работает метод put() LinkedHashMap?

Итак, когда мы вызываем put (карта, ключ) связанногоhashmap. Внутри он вызывает [createEntry][1].

void createEntry(int hash, K key, V value, int bucketIndex) { 
440  HashMap.Entry<K,V> old = table[bucketIndex]; 
441  Entry<K,V> e = new Entry<K,V>(hash, key, value, old); 
442  table[bucketIndex] = e; 
443  e.addBefore(header); 
444  size++; 
445 } 

Здесь я не могу понять использование старой переменной.

Почему новая запись добавляется перед заголовком. Он должен быть добавлен в конец linkedhashmap.

Может кто-нибудь объяснить этот код.

ответ

1

Почему новая запись добавляется перед заголовком.

Проще реализовать этот способ. То же самое для HashMap. Это связанный с столкновением список, а не тот, который использует итератор.

Он должен быть добавлен в конец связанногоhashmap.

Где он говорит это?

+0

Не могли бы вы немного объяснить о введении ключевого значения в linkedhashmap? Например, для первого: он находит ведро, используя хэш ключа. Я не могу понять следующий шаг. – Thinker

+0

Хеш получен из ключа. Если вход уже не введен, он добавляется. Если есть запись, на ключ вызывается 'equals (Object)'. Если это не соответствие, добавляется новая запись в начало связанного списка. –

+0

Какое использование этого старого ключевого слова в коде. Старая запись переписывается (строка: 442) новой записью. – Thinker