HashMap と HashTable の違いについてよく質問されますが、今日はここでまとめてみましょう。
(1) 継承の歴史が違う
public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map
HashtableはDictionaryクラスから継承されるのに対し、HashMapはJava 1.2で導入されたMapインターフェースの実装です。
(2) 異なるセキュリティ
HashMap は非同期ですが、HashTable はデフォルトで同期されます。つまり、HashTable はスレッドセーフであり、正しく同期されていない場合は複数のスレッドで HashTable を共有できます。 。 Java 5 以降では、HashTable の代わりとなる ConcurrentHashMap が提供されており、HashTable よりもスケーラビリティが優れています。もちろん、次の方法で HashMap を同期できます:
Map m = Collections.synchronizeMap(hashMap);
(3) 値を null にできるかどうかの類似点と相違点
HashMap では、テーブル エントリのキーまたは値として null 値を使用できます。 。 HashMap 内の空のキーにできるレコードは 1 つだけですが、任意の数のエントリを空の値にすることができます。つまり、検索キーがテーブルで見つからない場合、または検索キーが見つかっても空の値である場合、get() は null を返しますが、HashTable では null 値は返されません。 key と value で許可されます。
(4) 2 つの間のトラバーサル メソッドの内部実装は異なります
Hashtable と HashMap はどちらも Iterator イテレータを使用します。HashMap のイテレータ (Iterator) はフェイルファスト イテレータですが、HashTable の列挙イテレータはフェイルファストではありません。歴史的な理由により、Hashtable も列挙を使用します。
(5) ハッシュ値の使い方が違います
HashTableはオブジェクトのhashCodeを直接使用しますが、HashMapはハッシュ値を再計算する必要があります。
(6) 両者の内部実装における配列の初期サイズと拡張方法は異なります
HashTable のハッシュ配列のデフォルトのサイズは 11 で、増加方法は old*2+1 です。 HashMap のハッシュ配列のサイズは 16 で、2 の指数である必要があります。
読んでいただきありがとうございます、皆さんのお役に立てれば幸いです、このサイトをサポートしていただきありがとうございます!
Java HashMap と HashTable の違いの詳細な説明については、PHP 中国語 Web サイトに注目してください。