値の重複を許可しないという事実を除けば、とHashSet
の違いは何ですか?HashMap
HashSet
私は賢明な実装を意味しますか?どちらもハッシュ テーブルを使用して値を格納するため、少しあいまいです。
値の重複を許可しないという事実を除けば、とHashSet
の違いは何ですか?HashMap
HashSet
私は賢明な実装を意味しますか?どちらもハッシュ テーブルを使用して値を格納するため、少しあいまいです。
HashSetはセットです。例:{1,2,3,4,5}
HashMapは、キー->値(キーから値)マップです。たとえば、{a-> 1、b-> 2、c-> 2、d-> 1}
上記の私の例では、HashMapに重複するキーがあってはなりませんが、重複する値が含まれている可能性があることに注意してください。
HashSetには、重複する要素があってはなりません。
それらは完全に異なる構成です。AHashMap
はの実装ですMap
。マップはキーを値にマップします。キールックアップはハッシュを使用して行われます。
一方、aHashSet
はの実装ですSet
。セットは、セットの数学的モデルと一致するように設計されています。ご指摘のとおり、 Aは実装をバックアップするためにHashSet
aを使用します。HashMap
ただし、まったく異なるインターフェイスを実装しています。
Collection
あなたがあなたの目的に最適なものを探しているとき、このチュートリアルは良い出発点です。本当に何が起こっているのか知りたいのなら、そのための本もあります。
両方の名前がHashで始まるのは本当に残念です。それはそれらの最も重要でない部分です。他の人が指摘しているように、重要な部分はHashの後にあります - SetとMap 。それらはそれぞれSet (順序付けられていないコレクション) とMap (キー付きアクセスを持つコレクション) です。それらはたまたまハッシュで実装されています-それが名前の由来です-しかし、それらの本質はそれらの名前のその部分の背後に隠されています.
名前に惑わされないでください。それらは深く異なるものです。
HashSet を使用すると、オブジェクトをセットに格納できますが、HashMap を使用すると、キーと値に基づいてオブジェクトを格納できます。すべてのオブジェクトまたは格納されたオブジェクトにはキーがあります。
名前が示すように、HashMap は連想Map (キーから値へのマッピング) であり、HashSetは単なるSetです。
Java の HashSet と HashMap の違い
HashSet は内部的に HashMap を使用してオブジェクトを格納します。物体。
Hashset/HashMap にキーとして格納されているオブジェクトは、ハッシュコードと等号契約をオーバーライドする必要があります。
HashMap の値オブジェクトにアクセス/格納するために使用されるキーは、Final として宣言する必要があります。これは、値オブジェクトが変更されると、そのオブジェクトを見つけることができず、null を返すためです。
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 です。
AHashMap
は、任意のタイプのカスタムキーによってインデックス付けされたオブジェクトを追加、取得、削除、...することです。
AHashSet
は、要素を追加し、要素を削除し、ハッシュを比較して要素が存在するかどうかを確認することです。
したがって、HashMapには要素が含まれ、HashSetはそれらのハッシュを記憶します。
違い: 階層に関して: HashSet は Set を実装します。HashMap は Map を実装し、キーと値のマッピングを格納します。
データベースに関して HashSet と HashMap を使用すると、それぞれの重要性を理解するのに役立ちます。
HashSet:通常、一意のコレクション オブジェクトを格納するために使用されます。
例:クラス Item と Class Bid
の間の多対 1 の関係シップを格納するための実装クラスとして使用される場合があります。ここで (Item には多くの入札があります) HashMap:キーを値にマップするために使用されます。値は null または任意のオブジェクトです。 /オブジェクトのリスト (それ自体がオブジェクトです)。
HashSet は、HashMap を内部的に使用してエントリを格納します。内部 HashMap の各エントリは単一のオブジェクトによってキー付けされるため、すべてのエントリが同じバケットにハッシュされます。内部 HashMap がその値を格納するために何を使用するかは覚えていませんが、その内部コンテナーには重複する値が決して含まれないため、実際には問題ではありません。
編集:マシューのコメントに対処するには、彼は正しいです。逆に持ってました。内部 HashMap は、Set 要素を構成する Object でキー設定されます。HashMap の値は、単に HashMap バケットに格納されているオブジェクトです。
HashSetとHashMapはどちらもペアを格納します。違いは、HashMapではキーを指定できるのに対し、HashSetではキーがオブジェクトのハッシュコードから取得されることです。
基本的に、HashMapでは、ユーザーはキーと値の両方を指定する必要がありますが、HashSetでは、値のみを指定します。キーは、ハッシュ関数を使用して値から自動的に取得されます。したがって、キーと値の両方を取得した後、HashSetをHashMapとして内部に格納できます。
HashMaps
1 つの null キーと null 値を許可します。それらは同期されないため、効率が向上します。必要な場合は、次を使用してそれらを同期させることができますCollections.SynchronizedMap()
Hashtables
null キーを許可せず、同期されます。
あなたは自分の質問にほぼ答えました-ハッシュセットは重複する値を許可しません。バッキングハッシュマップを使用してハッシュセットを構築するのは簡単です(値が既に存在するかどうかを確認するだけです)。さまざまなJava実装がそれを行うか、カスタムコードを実装してより効率的に行うと思います。
HashMap は Map インターフェイスの実装です HashSet は Set インターフェイスの実装です
HashMap キーと値のペアの形式でデータを格納します HashSet ストアのみのオブジェクト
Put メソッドを使用してマップに要素を追加します Add メソッドを使用して要素を追加します Set
ハッシュマップでは、キーオブジェクトを使用してハッシュコード値が計算されます。ここで、メンバーオブジェクトは、2 つのオブジェクトで同じになる可能性があるハッシュコード値を計算するために使用されるため、2 つのオブジェクトが異なることを意味する false を返す場合、equal () メソッドを使用して等しいかどうかをチェックします。
オブジェクトへのアクセスに一意のキーが使用されるため、HashMap は hashset よりも高速です。 HashSet は Hashmap よりも低速です。