1

与えられた:

Object nestKey;
Object nestedKey;
Object nestedValue;

Map<T,Map<T,T>> nest;
Map<T,T> nested;  

ネストされた場所にマッピングを追加するにはどうすればよいですか。

nest.containsKey(nestKey)== true;

それとも、より効果的なコレクションの既存のライブラリがありますか?

4

4 に答える 4

1

これは、次のいずれかのかなり一般的なイディオムです。

  • あなたが提案するように地図の地図を持っています
  • キーが「メイン」キーと「サブキー」を組み合わせた 1 つのマップを用意します (スペースをより効率的に使用できる可能性がありますが、キーとサブキーを反復する必要がある場合は一般的にあまり適していません)。
于 2009-02-10T05:32:44.557 に答える
1

次のジェネリックメソッドのようなものですか?

static <U,V,W> W putNestedEntry(
        Map<U,Map<V,W>> nest,
        U nestKey,
        V nestedKey,
        W nestedValue)
{
    Map<V,W> nested = nest.get(nestKey);

    if (nested == null)
    {
        nested = new HashMap<V,W>();
        nest.put(nestKey, nested);
    }

    return nested.put(nestedKey, nestedValue);        
}
于 2009-02-10T05:58:47.583 に答える
0

よく分からない。次のようにネストされたマップに追加したいと思います。

nest.get(nestKey).put(nestedKey, nestedValue);

get on outer map が type のマップを返すため、これは不可能Map<?, ?>です。put メソッドを呼び出すことはできません。無制限のワイルドカード「?」コレクションのコンテンツのタイプがわからないが、それらをオブジェクトと見なしたい場合に使用する必要があります。コンテンツを読み取って変更する必要があり、マップに異種オブジェクトが含まれている場合は、生の型を使用できます。それは次のようなものです:

Map<?, Map> nest;

もちろん、最善の方法は (可能であれば) 同種の Map を使用してその型を指定することです。例えば。Map<String, String>

于 2009-02-10T05:31:27.850 に答える
0

これを試して

if (nest.containsKey(nestKey)) { ((Map) nest.get(nestKey)).put(nestedKey, nestedValue); }

于 2009-02-10T05:33:27.223 に答える