JavaのHashMapとHashtableの違いは何ですか。

  1. ハッシュテーブルのスレッドセーフ性は、Hashtableはスレッドセーフであり、HashMapはそうではない。複数スレッド環境でHashtableを使用することで競合状態を避けることができますが、パフォーマンスにはある程度の損失があります。一方、HashMapは単一スレッド環境でのパフォーマンスが優れています。
  2. Hashtableでは、nullというキーまたは値を許可していません。もしHashtableにnullのキーまたは値を入れようとすると、NullPointerExceptionが発生します。一方、HashMapはnullのキーまたは値を許可しています。
  3. 継承関係:HashtableはHashtableクラスのサブクラスであり、一方、HashMapはAbstractMapクラスのサブクラスであり、Mapインタフェースを実装しています。
  4. ハッシュテーブルの反復子はfail-fastであり、反復中にハッシュテーブルを変更するとConcurrentModificationException例外がスローされます。一方、ハッシュマップの反復子もfail-fastですが、複数のスレッドが同期されていない場合、並行変更例外が発生する可能性があります。
  5. 性能:Hashtableはスレッドセーフなため、同期処理にはパフォーマンスの損失が生じます。それに対して、HashMapはパフォーマンスが速いです。

要納得なMapが必要ならば、Hashtableを使用することができます。一方、単一スレッド環境であり、かつパフォーマンスが要求される場合は、HashMapを使用することができます。

bannerAds