JavaでのHashMapとHashTableの違い

公開: 2021-06-02

Javaとそのアプリケーションについて学習している場合は、HashMapとHashTableに出くわしたはずです。 どちらも、Javaコレクションフレームワークで最も重要なクラスの1つです。 Javaで開発している間、それらを広範囲に使用することになります。そのため、それらの違いを理解することが重要です。

次のポイントでは、HashTableとHashMapのトピックについて詳しく説明し、2つの違いについて説明します。

目次

HashMapとは何ですか?

HashMapは、Java1.2の導入以来Javaのコレクションに含まれています。 これにより、JavaのMapインターフェースの基本的な実装を実行できます。 HashMapはデータを(Key、Value)ペアで格納し、それらにアクセスするには、整数などの別のタイプのインデックスを使用する必要があります。

ここでは、あるオブジェクトを別のオブジェクト(値)のキー(インデックス)として使用するため、(キー、値)のペアを使用します。 重複するキーを追加すると、対応するキーの要素が置き換えられます。

HashMapの機能

HashTableとHashMapの違いを理解するには、まず、それらの機能を理解する必要があります。 それはあなたがそれらの両方の基本に精通するようになるでしょう。 HashMapには次の機能があります。

  • これはjava.utilパッケージの一部です。
  • これは、Mapインターフェースの不完全な実装を提供する抽象クラスAbstractMapを拡張します。
  • Mapインターフェースの実装に加えて、SerializableおよびCloneableインターフェースも実装します。
  • 重複する値は許可されますが、重複するキーは許可されません。 つまり、1つのキーに複数の値を設定することはできませんが、複数のキーに1つの値を設定することはできます。
  • nullキーはHashMapで1回だけ使用できますが、複数のnull値を使用できます。
  • マップの順序、特に順序が時間の経過とともに一定であるかどうかについては保証されません。 HashMapはHashTableとほぼ同じですが、同期されていません。
  • HashSetは内部でHashMapを使用します。

HashTableとは何ですか?

HashTableクラスを使用して、キーを値にマップするハッシュテーブルを実装します。 ここでは、null以外のオブジェクトをキーまたは値として使用できます。 ハッシュテーブルからオブジェクトを正常に格納および取得するには、キーとして使用したオブジェクトがhashCodeメソッドとequalsメソッドを実装している必要があることに注意してください。

ハッシュテーブルはデータを配列形式で格納し、すべてのデータ値には一意のインデックス値があります。 これにより、必要なインデックスがわかっている場合は、特定のデータに非常にすばやくアクセスできます。

HashTableの機能

HashTableには、HashMapと同様に、固有の機能があります。 ただし、これらの機能により、HashMapとは多くの点で独自性があり、異なります。

  • HashTableはHashMapと非常に似ていますが、同期されています。
  • キーと値のペアをハッシュテーブルに格納します。
  • ここでは、キーとして使用するオブジェクトと、それに関連付ける値を指定します。 次に、キーをハッシュし、生成されたハッシュコードを、テーブル内の値を格納するインデックスとして使用します。
  • Hashtableクラスのデフォルトの容量は11で、負荷率は0.75です。
  • HashMapは列挙型を提供しませんが、Hashtableはフェイルファスト列挙型を提供しません。

HashMapとHashTableの違い

HashMapとHashTableの特定のハイライトがわかったので、次にそれらを比較して、2つの間の顕著な違いを確認します。

HashMap ハッシュ表
同期されていません。 スレッドセーフではないため、適切な同期コードを使用せずにここで多くのスレッドを共有することはできません。 同期されます。 スレッドセーフなので、多くのスレッドと共有できます。
AbstractMapクラスを継承します。 Dictionaryクラスを継承します。
ここで、イテレータはフォールファストです。 HashTableでは、列挙子はフォールファストではありません。
イテレータはHashMapをトラバースします。 列挙子とイテレータはHashTableをトラバースします。
コードを呼び出すことでHashMapを同期させることができます
マップm=Collections.synchronisedMap(hashMap);
ハッシュテーブルは内部で同期されており、コードとの同期を解除することはできません。
かなり速いです。 HashMapよりも比較的低速です。
HashMapは新しいクラスであり、最近JDK1.2で導入されました。 HashTableはレガシークラスです。
複数のnull値と1つのnullキーを許可します。 null値またはキーは許可されません。

コーディング例

以下は、HashMapとHashTableの違いを理解できるように、HashMapとHashTableが機能している例です。

入力:

importjava.util。*;

importjava.lang。*;

java.io.*をインポートします。

パブリッククラスJavaTester{

public static void main(String args []){

ハッシュテーブルht=new Hashtable();

ht.put(1、” Uday”);

ht.put(1、” Ujjwal”);

ht.put(2、”サミット”);

ht.put(3、” Vijay”);

System.out.println(“ ————-ハッシュテーブル————–“);

Set <Integer> keySet = ht.keySet();

for(Integer key:keySet){

System.out.println(key +”“ + ht.get(key));

}

HashMap hm = new HashMap();

hm.put(0、” Uday”);

hm.put(4、” Uday”); //ハッシュマップに重複する値を含めることができます

hm.put(1、” Summit”);

hm.put(2、” Vijay”);

System.out.println(“ ———–ハッシュマップ———–“);

Set <Integer> keySet1 = ht.keySet();

for(Integer key:keySet){

System.out.println(key +”“ + hm.get(key));

}

}

}

出力:

ハッシュ表:

3 Vijay

2スミット

1 Ujjwal

ハッシュマップ:

0ウダイ

1スミット

2 Vijay

4ウダイ

HashMapとHashTableをいつ使用するのですか?

HashMapとHashTableのどちらを使用するかを決定する主な要因は、同期です。 スレッドセーフなタスクが必要な場合は、すべてのメソッドが同期されているため、HashTableを使用する必要があります。 ただし、これはレガシークラスであるため、避ける必要があります。

マルチスレッド環境を使用している場合は、HashTableと非常によく似ているため、ConcurrentHashMapを使用する必要があります。 これにより、HashMapを適切に同期させることができます。

同期された操作はパフォーマンスの低下を引き起こすため、ほとんどの場合、それらを回避する必要があります。 さらに、HashMapは非スレッド環境に適しているため、簡単に使用できます。

世界のトップ大学からオンラインでソフトウェアコース学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。

結論

HashMapとHashTableは、同様の機能を持つ一般的なJavaコードです。 ただし、ご覧のとおり、この2つにはいくつかの顕著な違いがあります。 HashMapはJavaクラスですが、HashTableはデータ構造です。

Javaやその他のプログラミング言語について詳しく知りたい場合は、フルスタック開発に特化したソフトウェア開発のエグゼクティブPGプログラムを確認することをお勧めします

ハッシュテーブルとは何ですか?

ハッシュテーブルは、コンピュータプログラミングで広く使用されているコンテナデータ構造です。 ハッシュテーブルは、キーと値のペアを保持するために使用されます。キーは任意のオブジェクトにすることができます。 コンテナとして、ハッシュテーブルは挿入と削除の操作をサポートする必要があります。 ルックアップツールとして、ハッシュテーブルはgetの操作をサポートする必要があります。 ハッシュテーブルが辞書データ構造であると想定される場合は、containsの操作もサポートする必要があります。 したがって、一般に、ハッシュテーブルは、挿入、削除、取得、および包含の操作を効果的に実装するために広く使用されているデータ構造です。 ハッシュテーブルは、パフォーマンスが速いため広く使用されています。

Javaのコレクションフレームワークとは何ですか?

Javaコレクションフレームワークは、Javaプラットフォーム用のインターフェイス、クラス、およびアルゴリズムのセットです。 バージョン1.2以降、Javaプラットフォームの一部となっています。 コンテナ、リスト、キューなどのインターフェイスが含まれていますが、日付と時刻を処理するクラス、正規表現を処理するクラス、国際化を処理するクラス、ファイルの検索を処理するクラスも含まれています。

Javaのハッシュテーブルとハッシュマップの関係は何ですか?

ハッシュテーブルは、キーと値を関連付ける特別なデータ構造です。 キーは任意のオブジェクトにすることができますが、特定のハッシュテーブル内のすべてのキーは互いに比較可能である必要があります(つまり、同じまたは互換性のあるインターフェイスを使用します)。 Javaでは、マップはTreeMapを使用して実装される特定の種類のハッシュテーブルです。 マップ内のキーはequalsメソッドを実装する必要があり、マップはこのメソッドを使用して2つのキーが等しいかどうかを判断します。 これは、キーのみがマップに保存され、それらに関連付けられた値が必要なときにいつでも計算されることを意味します。