2

私はこのオブジェクトを持っています:

Map<Long, Set<String>> resourcesByID = new HashMap<Long, Set<String>>();

そして別の:

Set<String> resources;

より多くのセットをHashMapに配置したい場合、以前に配置したセットの要素をオーバーライドします。なんで?そして、どうすればこの問題を解決できますか?

4

3 に答える 3

2

仮定

Long id = 1234L;
Set<String> resources = ...;

LongaからSetthenへの別のマッピングを追加する場合

resourcesById.put(id, resources);

String既存のマッピングにsを追加する場合

resourcesById.get(id).addAll(resources);

また、初期化を正しく行っていない場合に、作業を簡単にするために...

if (!resourcesById.containsKey(id)) {
    resourcesById.put(id, new HashSet<String>());
}
resourcesById.get(id).addAll(resources);
于 2012-10-09T15:20:39.043 に答える
2
  • 各セットに同じキーを使用している可能性がある最初の理由。
  • キーがキーごとに異なる場合(長い) 、リソース参照を使用して同じSetを使用している可能性がある場合は、キーごとにSetの個別のインスタンスを作成する必要があります。
于 2012-10-09T15:20:43.233 に答える
0

一致する場合keyは前の値をオーバーライドし、一致しない場合はオーバーライドしません。

(また)

トーマスがコメントしたように、あなたのセットが変異していて、同じセットを更新している場合、そうです、それはオーバーライドするかもしれません。

于 2012-10-09T15:17:27.563 に答える