2

ハッシュマップストアがあり、たとえば (11,name1) (11,name2) が含まれていて、HashMap.get(11) を呼び出すと、11 の最初の入力を上書きすることを意味する name2 のみが表示されます。どのように保存できますか? ID 11 の name1 と name2 の両方で hashmap を使用していますか?HashMap と HashSet の両方を使用できることはわかっていますが、HashMap のすべての HashSet を作成したくありません。hashSet のみを使用したいだけです。どうすればいいですか?あなたがそれを手伝ってくれることを願っています。ありがとうございました。

public void insert(int ID, String key){
        int hashKey = Hash(key);
        System.out.println("Hash Key" + hashKey);
        int node = Find(ID,hashKey);

        storeR.put(node, key);
    }
4

4 に答える 4

6

以下を使用できます。

HashMap<Integer, List<String>>

ではHashMap、すべてのキーに値を入れる必要があります。もちろん、同じキーを 2 回入力すると、値がオーバーライドされます。

解決策は、すべてのキーの値のコレクションを保持することです。

代わりにあなたのコードで:

storeR.put(node, key);

あなたは書くべきです:

List<String> nodeValues = storeR.get(node);
if (nodeValues == null) {
    nodeValues = new ArrayList<String>();
    storeR.put(node, nodeValues  );
}
nodeValues.add(key);

storeRまた、タイプを次のように変更する必要がありますHashMap<Integer, List<String>>

MultiMapも同様のソリューションです。

于 2013-02-13T15:09:22.123 に答える
3

おそらく、Apache Commons Collections のMultiMapを使用できます。

于 2013-02-13T15:10:05.040 に答える
1

各キーの値がHashMap別のコレクション (リストまたはセット) であるか、文字列値を連結する (カンマ区切りなど) 必要があります。

または、キーごとに複数の値をサポートするデータ コレクションを見つけることができる場合もあります。

于 2013-02-13T15:10:03.437 に答える
1

1 つのキーに複数の値を格納するにHashMapは、値としてリストを含む を使用します。HashMapの実装は、既存のキーの値をオーバーライドします。

HashMap<Integer,List<String>>

また、MultiMapApache Commons から使用することもできます。または、使用しているだけの場合は、直接Integer使用することをお勧めします。array

List<String>[] yourList = new List<String>[initCapacity];

したがって、次のようにそのリストにアクセスできます。

yourList[0].add("A New Value");

最後に、適切と思われる任意のコレクションを使用できます。パフォーマンスが重要であり、同じインデックスに対して重複した値を保存しない場合は、HashSet も使用できます。

于 2013-02-13T15:17:04.950 に答える