web-dev-qa-db-ja.com

HashSetとHashMapの違いは?

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

実装は賢明ですか?どちらもhash tablesを使用して値を保存するため、少しあいまいです。

154
SpikETidE

それらはまったく異なる構成です。 HashMapは、Mapの実装です。 A Map は、キーを値にマップします。キーの検索はハッシュを使用して行われます。

一方、HashSetSetの実装です。 Set は、セットの数学モデルに一致するように設計されています。既に説明したように、HashSetHashMapを使用して実装をバックアップします。ただし、完全に異なるインターフェイスを実装します。

目的に最適なCollectionを探す場合、この Tutorial が出発点として適しています。何が起こっているのか本当に知りたい場合は、 そのための本があります もです。

140
justkt

HashSetはsetです。 {1,2,3,4,5}

HashMapはkey-> value(key to value)マップです。 {a-> 1、b-> 2、c-> 2、d-> 1}

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

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

286
b.roth

ハッシュセット

  1. HashSetクラスはSetインターフェースを実装します
  2. HashSetでは、オブジェクト(要素または値)を保存します。文字列要素のHashSetがある場合、HashSet要素のセットを表すことができます:{“ Hello”、“ Hi”、“ Bye”、“ Run”}
  3. HashSetでは、HashSetに重複した値を格納できないことを意味する重複した要素は許可されません。
  4. HashSetは、単一のnull値を持つことを許可します。
  5. HashSetは同期されません。つまり、明示的に同期されない限り、スレッドセーフな操作には適していません。[類似性]

                          add      contains next     notes
    HashSet               O(1)     O(1)     O(h/n)   h is the table 
    

ハッシュマップ

  1. HashMapクラスはMapインターフェースを実装します
  2. HashMapは、キーと値のペアを保存するために使用されます。つまり、キーと値のマッピングを維持します(HashMapクラスは、非同期でnullを許可することを除いて、Hashtableとほぼ同等です)。例えば{1->「こんにちは」、2->「こんにちは」、3->「バイ」、4->「実行」}
  3. HashMapは重複キーを許可しませんが、重複値を許可します。
  4. HashMapは、単一のヌルキーと任意の数のヌル値を許可します。
  5. HashMapは同期されません。つまり、明示的に同期されない限り、スレッドセーフな操作には適していません。[類似性]

                           get      containsKey next     Notes
     HashMap               O(1)     O(1)        O(h/n)   h is the table 
    

詳細については この記事 を参照してください。

58
Avanish Kumar

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

名前で混同しないでください。それらは非常に異なるものです。

34
Carl Manaster

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

3
Spidfire

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

2
leonbloy

Hashsetは、HashMapを内部的に実装します。内部 実装 が表示される場合、HashSetに挿入された値はHashMapにキーとして格納され、値はObjectクラスのダミーオブジェクトです。
HashMapとHashSetの違いは:-

  1. HashMapにはキーと値のペアが含まれ、getメソッドがないため、HashSetを毎回繰り返す必要があるため、キーによって各値にアクセスできます。
  2. HashMapはMapインターフェースを実装し、1つのnull値をキーとして、複数のnull値を値として許可します。HashSetはSetインターフェースを実装します。 HashMapキーで許可されているため、HashSetの1つのnull値はHashSet実装としてHashMapを内部的に実装しています)。
  3. HashSetおよびHashMapは、反復中に挿入の順序を維持しません。
2
Abhay S

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

そのため、HashMapには要素が含まれ、HashSetにはそのハッシュが記憶されます。

1

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にキーと値を挿入することです。

HashSetは1つのヌルキーのみを許可しますが、HashMapは1つのヌルキーと複数のヌル値を許可できます。

それはすべて、JavaのHashSetとHashMapの違いにあります。要約すると、HashSetとHashMapは2つの異なるタイプのコレクションであり、1つはセットで、もう1つはマップです。

1

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

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

1

JavaでのHashSetとHashMapの違い

HashSetは内部的にHashMapを使用してオブジェクトを格納します。add(String)メソッドが呼び出されると、HahsMap put(key、value)メソッドを呼び出します。ここで、key = String object&value = new Object(Dummy)。オブジェクト。

hashset/HashMapにキーとして保存されているオブジェクトは、ハッシュコードと等しいコントラクトをオーバーライドする必要があります。

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

1
user3539704

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

0

HashSetは、HashMapを内部的に使用してそのエントリを保存します。内部HashMapの各エントリは単一のオブジェクトによってキー設定されるため、すべてのエントリは同じバケットにハッシュされます。内部HashMapが値を格納するために使用するものを思い出しませんが、その内部コンテナーには重複した値が含まれないため、それは実際には重要ではありません。

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

0
Andy Gherna

HashMapMapの実装であり、値の重複を許可しますが、キーの重複ではありませんを許可します。オブジェクトを追加するには、キー/値のペアが必要です。 NullキーとNull値が許可されます。例えば:

{The-> 3、world-> 5、is-> 2、Nice-> 4}

HashSetSetの実装であり、重複を許可しないを実行します。重複オブジェクト、public boolean add(Object o)メソッドの呼び出しを追加しようとした場合、セットは変更されずに残り、falseを返します。例えば:

[The、world、is、Nice]

0
Meenakshi Pant