0

以下のキー/値リストでは、「val3」がさまざまなキーに対して繰り返されています。このようなタイプのリストに最適なマップはどれですか。

「val3」は、複数のキーが指すように1回だけ保存する必要があります。

key1 ---- > val1
key2 ----> val3
key3 ----> val3
key5 ----> val5
key6 ----> val3
key7 ----> val6
key8 ----> val3
key9 ----> val3

4

2 に答える 2

2

どんなMap実装でもかまいません。すべてのJavaコレクションは参照のみを保持し、実際のオブジェクトは保持しないため、同じオブジェクトをマップに複数回配置すると、すべての値が同じオブジェクトを指します。val3つまり、ルックアップを通じて行われた変更は、をkey2指す他のキーでルックアップするときに反映されますval3

簡略化した例を考えてみましょう。

VeryLarge v = new VeryLarge();
Map<Integer, VeryLarge> map = new HashMap<>();
map.put(1, v);
map.put(2, v);
map.put(3, v);

単一VeryLargeのインスタンスは、すべての12および3キーによって参照されます。

于 2012-11-01T11:07:31.150 に答える
1

clone操作によって値を取得しないこと、または値が不変オブジェクトでないことを確認する限り(StringリテラルまたはInteger.valueOf()(-128から127までの値はキャッシュされ、キャッシュから返される)例外です)、終了します。同じ関係する参照を指す複数のキーを使用します。

HashMapたとえば、@ Tomasz Nurkiewiczがアドバイスしたように、使用できます。

于 2012-11-01T11:20:35.870 に答える