2016-08-30 5 views
0

私の問題は、hashMap.get(key)が呼び出されたときに内部LinkedListへの参照を返すHashMapが必要であるということです。単にキーに対応する値を返すだけではありません。JavaのHashMapsとリストの調整

私が集めたことから、LinkedHashMapは、二重リンクリストが各マップエントリを占有して衝突処理を行うことを可能にします。しかし、私はそれにマップされたすべての値をカプセル化している包括的なLinkedListへの参照を取得できるようにしたい(LinkedListを共有する各オブジェクトは、オーバーライドされたハッシュコード関数により非常に興味がある特定の機能も共有する)。

別の言い方をすれば、私はLinkedHashMapクラスに組み込まれているリンクリスト自動トラバーサルを避け、リスト自体の参照を操作可能にしたいと考えています。

linkedHashMap.put(key、value)を呼び出してLinkedListsの最後に新しい値を追加できるだけでなく、この参照を返すこともできます。

何か指摘していただければ幸いです。

+0

「LinkedHashMapを使用すると、二重リンクされたリストが各マップエントリを占有して衝突処理を行うことができます」 - いいえ、LinkedHashMapに名前を付けたリンクリストは完全に異なるものです。衝突解決リストは、通常のHashMapに存在します。 – user2357112

+0

'Map >' ??それはあなたのニーズに合っていますか? 'linkedHashMap.put(key、value)'は単純なgetとupdateのステップで行うことができます(しかし、同期していなければアトミックではありません) – Antoniossss

+3

'HashMap >'を使うのはなぜですか? – user2357112

答えて

1

LinkedHashMapは、そのキーを定義された順序で格納します(A LinkedListはKeySetをバックアップします)。どのように衝突を処理するかについては何もありません。

これまで説明した内容については、自分で実装する必要があると思います。基本的にはMap<KeyType, List<EntryType>>を作成しており、関連するリストに追加する「put」機能があります。多すぎるコードではありません。

あなたが説明した内容が本当にそのインターフェイスと一致しないので、実際にはMapを拡張することはできません。

+0

Java 8では、['Map#computeIfAbsent'](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#computeIfAbsent-K-java.util)のほうがずっと簡単です。 (キー、k - >新しいLinkedList <>())のようなものを使用することによって、(function.Function-) – 4castle

+0

@ 4castleを追加しました。ありがとう! –

関連する問題