1

私は現在、リンクされたリストの固定サイズの HashMap を持っており、get() を呼び出してからそのリンクされたリストの内容を変更する (ノードなどを追加/減算する) ことによって、2 つの異なるキーの値を変更しても安全かどうか疑問に思っていました。 )? サイズ変更の問題が発生する可能性があるため、異なるキーを同時に変更するのは安全ではないことはわかっていますが、1) ハッシュマップのサイズは固定されており、リンクされたリストはすべて最初から (空のリストとして) 初期化されています。このような場合、HashMap はリンクされたリストへのポインターを格納するため、リストを変更しても HashMap の内容は実際には変更されませんが、確かではありません。

これに答えることができるJavaに詳しい人はいますか? そもそもスレッドセーフなデータ構造を使用しない理由は、プロジェクトの仕様で禁止されているためです。ありがとう!

4

3 に答える 3

3

マップは事実上読み取り専用であるため、これで問題ありません。Collections.unmodifiableMapまたは GuavaのImmutableMap.

ただし、個々のリストへのシングルスレッドアクセスを保証できない限り、リンクされたリストは別の問題です。そうでない場合、簡単な解決策はCollections.synchronizedList、作成時に使用して各リストをラップすることです。ConcurrentLinkedQueueまたは、代わりに sを使用することもできます。

于 2013-04-30T01:03:20.413 に答える