2

ハッシュマップを使用してデータを保存しました。問題は、ハッシュマップが複数の同じキーを持つことができないことに気づいたことです。データが次のように見えるデータを保存するために他に何を使用する必要がありますか?

  • 名前1100.0
  • 名前299.8
  • Name3 121.5
  • ..。

私がやろうとしている他のことは、私がそのキーを呼び出すときに、ある特定の人のデータを表示することです。では、1つのキーに関連する複数の値を格納する方法はありますか?または、他のタイプのストレージを使用する必要がありますか?

4

4 に答える 4

3

リンクリストや各キーインデックスのツリーなど、別のデータ構造内に値を格納する場合、ハッシュマップに重複するキーが含まれる可能性があります。次に、衝突の処理方法を決定する必要があります。

編集:

HashMap

["firstKey"] => LinkedList of (3,4,5)
["secondKey"] => null
["thirdKey"] => LinkedList of (3)
于 2012-11-24T05:54:28.060 に答える
1

Matthew Coxesの回答を拡張するには、ハッシュテーブルクラスを拡張して、リストを自動的に管理し、複数のキーを持っているように見せることができます。

于 2012-11-24T05:57:01.223 に答える
1

独自のデータモデルを使用して、それをリストに保存するか、高速アクセスが必要な場合はマップします。

public class Player {
    private String name;
    private List<Float> scores;
}

利点:

  • 構造が何を表現したいのか、すぐにわかります
  • 簡単に拡張できます (たとえば、プレーヤーのエイリアスを追加したり、プレーヤー 1 の平均スコアを計算したりします)。
于 2012-11-24T08:14:48.127 に答える
1

Google guava ライブラリには、キーごとに複数の要素を許可するコレクション タイプが含まれています。一番Multimap最初に思いつくのはこれです。

http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Multimap.html

一般に Guava には非常に便利なユーティリティがたくさん含まれているので、チェックする価値があると思います。

外部ライブラリを使用できない場合は、単純に (Matthew Cox が言ったように) マップと List をMap<K, List<V>>. ただし、すべてのキーのリストを初期化する必要があるため、これを使用するのは少し不便です。

于 2012-11-24T06:09:01.430 に答える