1

キーに文字列を使用し、値に ArrayLists を使用する HashMap の実装に基づいて、テスト駆動型開発の問題 (提供された junit メソッドに基づいて機能させる必要があります) が与えられました。キーは、1 つ以上の対応する値をサポートできる必要があります。ハッシュに値を加算または減算できるようにメソッドを設定し、ハッシュの更新された内容を確認する必要があります。私の苦労は、以下に示す unit メソッド (myClass の実行と、addingMethod メソッドのメソッド) から提供される情報を取得し、それを適切にハッシュに入れることです。

void add() {
    myClass = new MyClass("key1", "value1");
    myClass.addingMethod("blargh", "blarghvalue");
    myClass.addingMethod("blargh2", "uglystring");
    myClass.addingMethod("blargh", "anotherstring");
    //and so on and so on............

私の最終結果として、myClass の結果を出力すると、{blargh=[blarghvalue, anotherstring], blargh2=uglystring} のようなものを見る必要があります。

これに追加したり、値を削除したりできる必要があります。

私はJavaコレクションに非常に慣れていません(明らかに)。1 対 1 の関係しかなく、ハッシュマップが 1 対 1 である場合にのみ機能させることができます。したがって、次のような非常に単純なaddingMethod:

public void addingMethod(String key, String value) {
    hashMap.put(key, value);

文字列文字列ハッシュマップを取得しますが、もちろん、新しいキーと値のペアでキーを再利用すると、元のキーと値が踏まれて消えてしまいます。ただし、ハッシュマップと配列リストを動的に操作することになると、1:1 のキー:値の関係を超えて、私は道に迷います。

4

2 に答える 2

3

必要なのはMap<String, List<String>>、エントリが存在するかどうかをチェックし、存在する場合はリストに追加することです。

以下のようにマップを宣言します

Map<String, List<String>> map = new HashMap<String, List<String>>();

の構文はadding Method次と同じである必要があることに注意してくださいput

public List<String> put(String key, String value) {
    if (!map.containsKey(key)) {
        return map.put(key, new ArrayList<String>());
    }
    List<String> list = map.get(key);
    list.add(value);
    return map.put(key, list);
}
于 2012-10-26T22:08:33.177 に答える
3

MultiMapGoogle のすばらしい によって提供される が必要なようですGuava libraries

Map に似たコレクションですが、複数の値を 1 つのキーに関連付けることができます。同じキーで異なる値を指定して put(K, V) を 2 回呼び出すと、マルチマップにはキーから両方の値へのマッピングが含まれます。

于 2012-10-26T22:08:39.113 に答える