2
でaddbefore方法の仕事は私がのLinkedHashMapのソースコードを探していないとaddBefore方法は、私は多くのことを混同します:はどのようにのLinkedHashMap
private void addBefore(Entry<K,V> existingEntry) {
after = existingEntry;
before = existingEntry.before;
before.after = this;
after.before = this;
}
このメソッドはcreateEntryメソッドで呼び出されます。
void createEntry(int hash, K key, V value, int bucketIndex) {
HashMap.Entry<K,V> old = table[bucketIndex];
Entry<K,V> e = new Entry<>(hash, key, value, old);
table[bucketIndex] = e;
e.addBefore(header);
size++;
}
addBeforeメソッドに渡されるパラメータは常にヘッダーエントリなので、addBeforeメソッドの以降の変数は常にヘッダーエントリです。さらに、ヘッダーノードは決して変更されません。
私の質問は、どのようにaddBeforeメソッドが二重リンクリストを形成するために働くのですか?
は、それは私には明らかではありません。私はあなたがそれを説明することができれば、あなたはあなたの質問に対する答えを持っていると思います。 –
いくつかの図を描くと意味があります。 'Node'の前に挿入したいのであれば、その間に挿入する' Node'とその前の 'Node'を知っています。 'existingEntry'は前に新しい' Node'を追加したい 'Node'です。したがって、 'existingEntry'の前に' Node'を見つけてください。この 'Node'は' existingEntry.before'です。今addBefore 'ノードの前に「ノード」の終わりまでとaddBefore' Node'の先頭に新しい 'Node'をリンクします。 – Sedrick
@SedrickJeffersonあなたは説明が欠けています。これはOPが混乱しているところです。 –