Dictionary
とHashtable
の違いは何ですか?JavaでDictionary
クラスをどのように操作しますか?
Dictionary
はHashtable
の抽象基本クラスです。古いコードとの下位互換性のため、どちらもまだJDKに含まれています。 Java 1.2で導入されたHashMap
およびMap
インターフェースの他の実装を使用することが期待されています。
Dictionary のjavadocに答えがあります。
辞書クラスは、キーを値にマップするHashtableなどのクラスの抽象親です。
Dictionary
クラスであるため、abstract
を直接操作することはできません。
同じドキュメントの次の点にも注意してください。
注:このクラスは廃止されました。新しい実装は、このクラスを拡張するのではなく、 Map インターフェースを実装する必要があります。
Dictionary
は、Hashtable
のスーパークラスである抽象クラスです。 obsolete であるため、Dictionary
を使用しないでください。 Hashtableの場合、HashMap
などの他のマップよりも優れていたのはスレッドセーフでしたが、ConcurrentHashMapが導入されたことにより、Java 1.5であるため、実際に使用する理由はありません。今後は javadoc を参照
Java 2プラットフォームv1.2以降、このクラスはMapインターフェイスを実装するために改良され、Javaコレクションフレームワークのメンバーになりました。新しいコレクションの実装、Hashtableは同期されます。スレッドセーフな実装が必要ない場合は、Hashtableの代わりにHashMapを使用することをお勧めします。スレッドセーフな高度な同時実装が必要な場合は、代わりにConcurrentHashMapを使用することをお勧めしますハッシュテーブルの。
要約すると:Dictionary
またはHashtable
は使用しないでください。互換性の理由で本当に必要な場合を除き、どちらかを使用してください。 HashMap
スレッドセーフが必要ない場合、またはConcurrentHashMap
マップが並行環境で使用されている場合。
Hashtable
はDictionary
の実装です。 Dictionary
は抽象クラスであるため、直接使用することはできません。
ただし、これらはMap
インターフェースと実装クラスに置き換えられているため、どちらも使用しないでください。その中で HashMap
が最も一般的です。
私はOOPの原則についての講義を見つけました。これにはあなたが求める答えが含まれています。
編集:
Dictionaryコンピューティングの主要なテーマは、ストレージ/取得/削除のテーマです。データがどこかに格納され、後で必要なくなったときにデータを取得して破棄できるようになります、これらすべての最も効率的な方法で。これらのコンピューティングアクティビティの抽象化は、Javaでインターフェイスとして次のように表現される、いわゆる辞書の概念で具体化されます。
ハッシュテーブルハッシュテーブルは、通常の配列の一般化です。ハッシュテーブルは通常、実際に格納されるキーの数に比例するサイズの配列を使用するため、実際に格納されるキーの数が可能なキーの総数に対して少ない場合、ハッシュテーブルは配列を直接アドレス指定する効果的な代替手段になります。キーを配列インデックスとして直接使用する代わりに、配列インデックスはキーから計算されます。ハッシュでは、キーkの要素がスロットh(k)に格納されます。つまり、ハッシュ関数hを使用して、キーkからスロットを計算します。 hは、キーのセットUをハッシュテーブルT [0..m-1]のスロットにマップします:h:U-> {0、1、...、m-1}
辞書クラスは、キーを値にマップするHashtableなどのクラスの抽象親です。すべてのキーとすべての値はオブジェクトです。 1つのDictionaryオブジェクトでは、すべてのキーが最大で1つの値に関連付けられています。辞書とキーを指定すると、関連付けられている要素を検索できます。 null以外のオブジェクトはすべて、キーおよび値として使用できます。
辞書のjavadocsによると:
注:このクラスは廃止されました。新しい実装は、このクラスを拡張するのではなく、Mapインターフェースを実装する必要があります。
HashtableもJDK 1.0ヴィンテージです。 Mapインターフェースとその最新の実装であるHashMapとTreeMapを好むはずです。