1. ホーム
  2. java

[解決済み] ConcurrentHashMapはなぜNullキーやNull値を防ぐことができるのですか?

2022-04-27 05:51:21

質問

のJavaDocは ConcurrentHashMap にはこう書いてある。

のように Hashtable とは異なり HashMap このクラスは ない 許可する null をキーまたは値として使用することができます。

私の質問です。なぜですか?

2つ目の質問 なぜ Hashtable は null を許可していますか?

データの保存にHashMapを多用するようになりました。しかし ConcurrentHashMap NullPointerExceptionsで何度かトラブルに見舞われました。

解決方法は?

の作者から ConcurrentHashMap 自身(Doug Lea) :

ConcurrentMapでNullが許されない主な理由は以下の通りです。 (ConcurrentHashMaps, ConcurrentSkipListMaps) は、曖昧な部分が 非同期マップではギリギリ許容できるかもしれませんが、それは無理です。 に対応することができます。主なものは、もし map.get(key) は以下を返します。 null ということです。 に明示的にマッピングされているかどうかを検出することはできません。 null 対して、キーがない場合は がマッピングされます。非同期マップの場合、これを確認するには map.contains(key) しかし、同時実行型では、マップが変更されている可能性があります。 を呼び出す。