web-dev-qa-db-ja.com

HashtableとHashMapを使用する場合

これは、HashtableHashMapの違いについての質問ではありません。Hashtableオブジェクトは、キーまたは値のエントリのnull値を受け入れることができず、同期コレクションであり、HashMapよりもわずかに少ないメモリを使用することを理解しています。

Hashtableの代わりにHashMapを使用する方が適切なシナリオについて考えています。

27
Vivin Paliath

これはHashtableHashMapの違いについての質問ではありません

まあそれは本当に...

Hashtableの代わりにHashMapを使用する方が適切なシナリオについて考えています。

正確にwantの2つの違い:

  • Java 1.1で実行したい場合
  • 各操作を同期させたい場合(formを取得し、反復しない限り)-何らかの理由でCollections.synchronizedMapを使用したくない場合HashMap
  • Null値を格納したくない場合
  • メモリの違いが実際に重要な場合(証明済みがそうである場合のみ)-これは個人的にもこの違いに気づかなかった...
  • Hashtableを返すまたは受け取る厄介なAPIに強制されたとき(幸いなことに、比較的まれです)

私が最後にそのような状況にあったときのことを個人的に思い出せません-現代のJavaコードでHashtableを使用するのが適切であることはほとんどありません。

27
Jon Skeet

決して。 Hashtableは、Java 1.でのマップの元の実装でした。これは、Mapの実装によって上書きされました。確かに、Hashtableは、それに合わせて改良されていますが、それほど有用ではありません。

同期するという主な問題があります。これは、スレッド間で共有されている状況では遅くなることを意味します。そのような状況では、ConcurrentHashMapの方が適しています。シングルスレッドで実行している場合は、非同期のHashMapの方が適しています。

14
Sarge

JNDIは非常にイライラするInitialContext class のように、それを必要とするAPIを使用している場合、1つの有効な理由しか考えられません。

それ以外に、Hashtableを使用する理由はまったくわかりません。 Collections.synchronizedMapを使用すると、HashMapの同期バージョンを取得できます。

7
skaffman

レガシーアプリ/ライブラリでのみハッシュテーブルが表示されます。

可能であれば、同期マップが必要な場合は、ConcurrentHashMapまたはCollections.synchronizedMapを使用してください。

http://docs.Oracle.com/javase/7/docs/api/Java/util/concurrent/ConcurrentHashMap.html

http://docs.Oracle.com/javase/7/docs/api/Java/util/Collections.html#synchronizedMap%28Java.util.Map%29

3
Puce

あるクラスまたは構造を別のクラスまたは構造でいつ使用するかを知ることは、本質的には2つのクラスまたは構造の違いを理解し、それらの違いに基づいて、どちらが問題に最も適しているかを決定することです。

Hashtableオブジェクトはnull値を受け入れることができないことを理解しています

したがって、null値を格納する必要がある状況では、Hashtableは適切ではありません。

また、Hashtableでは、列挙はフェールセーフではありません。したがって、列挙中に構造体の内容を変更できるようにする必要がある場合は、Hashtableがより適切です。

1