191

値の重複を許可しないという事実を除けば、とHashSetの違いは何ですか?HashMapHashSet

私は賢明な実装を意味しますか?どちらもハッシュ テーブルを使用して値を格納するため、少しあいまいです。

4

20 に答える 20

327

HashSetはセットです。例:{1,2,3,4,5}

HashMapは、キー->値(キーから値)マップです。たとえば、{a-> 1、b-> 2、c-> 2、d-> 1}

上記の私の例では、HashMapに重複するキーがあってはなりませんが、重複する値が含まれている可能性があることに注意してください。

HashSetには、重複する要素があってはなりません。

于 2010-05-05T14:00:39.963 に答える
175

それらは完全に異なる構成です。AHashMapはの実装ですMapマップはキーを値にマップします。キールックアップはハッシュを使用して行われます。

一方、aHashSetはの実装ですSetセットは、セットの数学的モデルと一致するように設計されています。ご指摘のとおり、 Aは実装をバックアップするためにHashSetaを使用します。HashMapただし、まったく異なるインターフェイスを実装しています。

Collectionあなたがあなたの目的に最適なものを探しているとき、このチュートリアルは良い出発点です。本当に何が起こっているのか知りたいのなら、そのための本もあります。

于 2010-05-05T14:00:37.073 に答える
39

両方の名前がHashで始まるのは本当に残念です。それはそれらの最も重要でない部分です。他の人が指摘しているように、重要な部分はHashの後にあります - SetMap 。それらはそれぞれSet (順序付けられていないコレクション) とMap (キー付きアクセスを持つコレクション) です。それらはたまたまハッシュで実装されています-それが名前の由来です-しかし、それらの本質はそれらの名前のその部分の背後に隠されています.

名前に惑わされないでください。それらは深く異なるものです。

于 2010-05-05T18:30:18.560 に答える
5

HashSet を使用すると、オブジェクトをセットに格納できますが、HashMap を使用すると、キーと値に基づいてオブジェクトを格納できます。すべてのオブジェクトまたは格納されたオブジェクトにはキーがあります。

于 2010-05-05T13:59:57.233 に答える
4

名前が示すように、HashMap は連想Map (キーから値へのマッピング) であり、HashSetは単なるSetです。

于 2010-05-05T14:00:00.927 に答える
2

Java の HashSet と HashMap の違い

HashSet は内部的に HashMap を使用してオブジェクトを格納します。物体。

Hashset/HashMap にキーとして格納されているオブジェクトは、ハッシュコードと等号契約をオーバーライドする必要があります。

HashMap の値オブジェクトにアクセス/格納するために使用されるキーは、Final として宣言する必要があります。これは、値オブジェクトが変更されると、そのオブジェクトを見つけることができず、null を返すためです。

于 2014-04-16T05:01:22.977 に答える
2

Java の HashSet と HashMap の違い

1) HashMap と HashSet の最初の最も重要な違いは、HashMap が Map インターフェイスの実装であるのに対し、HashSet は Set インターフェイスの実装であることです。つまり、HashMap はキー値ベースのデータ構造であり、HashSet は重複を許可しないことで一意性を保証します。現実 HashSet は、Java の HashMap のラッパーです。HashSet.java の add(E e) メソッドのコードを見ると、次のコードが表示されます。

public boolean add(E e) 
{
    return map.put(e, PRESENT)==null;
}

オブジェクトをキーと値としてマップに入れる場所は、ダミーの最終オブジェクト PRESENT です。

2) HashMap と HashSet の 2 番目の違いは、add() メソッドを使用して要素を Set に入れますが、put() メソッドを使用してキーと値を Java の HashMap に挿入することです。

3) HashSet は 1 つの null キーのみを許可しますが、HashMap は 1 つの null キー + 複数の null 値を許可できます。

Java の HashSet と HashMap の違いは以上です。要約すると、HashSet と HashMap は 2 つの異なるタイプのコレクションで、1 つは Set で、もう 1 つは Map です。

于 2013-02-05T09:26:12.743 に答える
1

AHashMapは、任意のタイプのカスタムキーによってインデックス付けされたオブジェクトを追加、取得、削除、...することです。
AHashSetは、要素を追加し、要素を削除し、ハッシュを比較して要素が存在するかどうかを確認することです。

したがって、HashMapには要素が含まれ、HashSetはそれらのハッシュを記憶します。

于 2010-05-05T14:04:21.893 に答える
1

違い: 階層に関して: HashSet は Set を実装します。HashMap は Map を実装し、キーと値のマッピングを格納します。

データベースに関して HashSet と HashMap を使用すると、それぞれの重要性を理解するのに役立ちます。
HashSet:通常、一意のコレクション オブジェクトを格納するために使用されます。
例:クラス Item と Class Bid の間の多対 1 の関係シップを格納するための実装クラスとして使用される場合があります。ここで (Item には多くの入札があります) HashMap:キーを値にマップするために使用されます。値は null または任意のオブジェクトです。 /オブジェクトのリスト (それ自体がオブジェクトです)。

于 2010-05-05T18:22:37.417 に答える
1

HashSet は、HashMap を内部的に使用してエントリを格納します。内部 HashMap の各エントリは単一のオブジェクトによってキー付けされるため、すべてのエントリが同じバケットにハッシュされます。内部 HashMap がその値を格納するために何を使用するかは覚えていませんが、その内部コンテナーには重複する値が決して含まれないため、実際には問題ではありません。

編集:マシューのコメントに対処するには、彼は正しいです。逆に持ってました。内部 HashMap は、Set 要素を構成する Object でキー設定されます。HashMap の値は、単に HashMap バケットに格納されているオブジェクトです。

于 2010-05-05T13:59:52.910 に答える
0

HashSetHashMapの観点から実装されます。これは、キーと PRESENT オブジェクトの間のマッピングです。

于 2010-05-05T13:59:05.240 に答える
-1

HashSetとHashMapはどちらもペアを格納します。違いは、HashMapではキーを指定できるのに対し、HashSetではキーがオブジェクトのハッシュコードから取得されることです。

于 2012-10-23T18:48:58.860 に答える
-1

基本的に、HashMapでは、ユーザーはキーと値の両方を指定する必要がありますが、HashSetでは、値のみを指定します。キーは、ハッシュ関数を使用して値から自動的に取得されます。したがって、キーと値の両方を取得した後、HashSetをHashMapとして内部に格納できます。

于 2011-08-07T06:50:44.337 に答える
-1

HashMaps1 つの null キーと null 値を許可します。それらは同期されないため、効率が向上します。必要な場合は、次を使用してそれらを同期させることができますCollections.SynchronizedMap()

Hashtablesnull キーを許可せず、同期されます。

于 2013-04-04T12:01:25.187 に答える
-1

あなたは自分の質問にほぼ答えました-ハッシュセットは重複する値を許可しません。バッキングハッシュマップを使用してハッシュセットを構築するのは簡単です(値が既に存在するかどうかを確認するだけです)。さまざまなJava実装がそれを行うか、カスタムコードを実装してより効率的に行うと思います。

于 2010-05-05T13:59:19.060 に答える
-2

HashMap は Map インターフェイスの実装です HashSet は Set インターフェイスの実装です

HashMap キーと値のペアの形式でデータを格納します HashSet ストアのみのオブジェクト

Put メソッドを使用してマップに要素を追加します Add メソッドを使用して要素を追加します Set

ハッシュマップでは、キーオブジェクトを使用してハッシュコード値が計算されます。ここで、メンバーオブジェクトは、2 つのオブジェクトで同じになる可能性があるハッシュコード値を計算するために使用されるため、2 つのオブジェクトが異なることを意味する false を返す場合、equal () メソッドを使用して等しいかどうかをチェックします。

オブジェクトへのアクセスに一意のキーが使用されるため、HashMap は hashset よりも高速です。 HashSet は Hashmap よりも低速です。

于 2015-05-04T14:31:58.707 に答える