これは、Hashtable
とHashMap
の違いについての質問ではありません。Hashtable
オブジェクトは、キーまたは値のエントリのnull
値を受け入れることができず、同期コレクションであり、HashMap
よりもわずかに少ないメモリを使用することを理解しています。
Hashtable
の代わりにHashMap
を使用する方が適切なシナリオについて考えています。
これは
Hashtable
とHashMap
の違いについての質問ではありません
まあそれは本当に...
Hashtable
の代わりにHashMap
を使用する方が適切なシナリオについて考えています。
正確にwantの2つの違い:
Collections.synchronizedMap
を使用したくない場合HashMap
Hashtable
を返すまたは受け取る厄介なAPIに強制されたとき(幸いなことに、比較的まれです)私が最後にそのような状況にあったときのことを個人的に思い出せません-現代のJavaコードでHashtable
を使用するのが適切であることはほとんどありません。
決して。 Hashtableは、Java 1.でのマップの元の実装でした。これは、Mapの実装によって上書きされました。確かに、Hashtableは、それに合わせて改良されていますが、それほど有用ではありません。
同期するという主な問題があります。これは、スレッド間で共有されている状況では遅くなることを意味します。そのような状況では、ConcurrentHashMapの方が適しています。シングルスレッドで実行している場合は、非同期のHashMapの方が適しています。
JNDIは非常にイライラするInitialContext
class のように、それを必要とするAPIを使用している場合、1つの有効な理由しか考えられません。
それ以外に、Hashtable
を使用する理由はまったくわかりません。 Collections.synchronizedMap
を使用すると、HashMap
の同期バージョンを取得できます。
レガシーアプリ/ライブラリでのみハッシュテーブルが表示されます。
可能であれば、同期マップが必要な場合は、ConcurrentHashMapまたはCollections.synchronizedMapを使用してください。
http://docs.Oracle.com/javase/7/docs/api/Java/util/concurrent/ConcurrentHashMap.html
あるクラスまたは構造を別のクラスまたは構造でいつ使用するかを知ることは、本質的には2つのクラスまたは構造の違いを理解し、それらの違いに基づいて、どちらが問題に最も適しているかを決定することです。
Hashtableオブジェクトはnull値を受け入れることができないことを理解しています
したがって、null値を格納する必要がある状況では、Hashtable
は適切ではありません。
また、Hashtable
では、列挙はフェールセーフではありません。したがって、列挙中に構造体の内容を変更できるようにする必要がある場合は、Hashtable
がより適切です。