質問: JavaにおいてのHashMapとHashtableの違いがよく分かりません。 HashMapはnullが格納できるが同期を外部で行う必要があり、Hashtableは同期を取得することができるが、とにかく遅いという感じでしょうか。 ちなみに、スレッドセーフを意識する必要のないアプリケーションに対しては、どちらを使うのがより効率的なのでしょうか?
回答: JavaにおいてHashMapとHashtableの違いはいくつかありますが、だいたいはあなたがおっしゃっているのと同じです。 一応まとめてみると、 * HashMapは同期されないがHashtableは同期される。(同期が無い分、HashMapの方が高速。) * Hashtableはnullのkeyやnullのvalueを許可しないが、HashMapは1つのnull keyおよび複数のnullのvalueを許可する。 * HashMapはkeyのコレクション順が一定ではない。 スレッドセーフを意識する必要の無いアプリケーションに対し、効率よく働いてくれるのはHashMapだと思いますね。 なぜなら、同期が不要なオブジェクトのほうが同期が必要なオブジェクトと比べ典型的に良いパフォーマンスを実行するからです。 なので、同期という点があなたにとってさほど重要なポイントでないなら、私はHashMapをお勧めします。 もし、同期が重要ポイントなのであれば、スレッドセーフなConcurrentHashMapを使うことも検討してみてください。