2017-08-01 7 views
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メソッドが二重リンクリストを形成するために働くのですか?

+0

は、それは私には明らかではありません。私はあなたがそれを説明することができれば、あなたはあなたの質問に対する答えを持っていると思います。 –

+0

いくつかの図を描くと意味があります。 'Node'の前に挿入したいのであれば、その間に挿入する' Node'とその前の 'Node'を知っています。 'existingEntry'は前に新しい' Node'を追加したい 'Node'です。したがって、 'existingEntry'の前に' Node'を見つけてください。この 'Node'は' existingEntry.before'です。今addBefore 'ノードの前に「ノード」の終わりまでとaddBefore' Node'の先頭に新しい 'Node'をリンクします。 – Sedrick

+0

@SedrickJeffersonあなたは説明が欠けています。これはOPが混乱しているところです。 –

答えて

関連する問題