別に事実からHashSet
重複する値を許可しない、の違いは何であるHashMap
とはHashSet
?
私は賢明な実装を意味しますか?どちらもハッシュテーブルを使用して値を格納するため、少しあいまいです。
別に事実からHashSet
重複する値を許可しない、の違いは何であるHashMap
とはHashSet
?
私は賢明な実装を意味しますか?どちらもハッシュテーブルを使用して値を格納するため、少しあいまいです。
回答:
それらは完全に異なる構成です。A HashMap
はの実装ですMap
。A 地図はキーを値にマップします。キーの検索はハッシュを使用して行われます。
一方、a HashSet
はの実装ですSet
。A セットは、セットの数学的モデルに一致するように設計されています。あなたが指摘HashSet
したように、A はHashMap
その実装をバックアップするためにを使用します。ただし、完全に異なるインターフェースを実装しています。
Collection
目的に最適なものを探している場合、このチュートリアルは出発点として最適です。あなたが本当に何が起こっているのか知りたいのなら、そのための本もあります。
HashSetはセットです。例:{1,2,3,4,5}
HashMapは、キー->値(キーから値)のマップです。例:{a-> 1、b-> 2、c-> 2、d-> 1}
上記の例では、HashMapに重複したキーがあってはならないが、重複した値がある場合があることに注意してください。
HashSetでは、重複する要素があってはなりません。
HashSetは同期されません。つまり、明示的に同期されない限り、スレッドセーフな操作には適していません。[類似性]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMapは同期されません。つまり、明示的に同期されない限り、スレッドセーフな操作には適していません。[類似性]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
どちらの名前もHashで始まるのは本当に残念です。それは彼らの中で最も重要ではない部分です。他の人が指摘したように、重要な部分はハッシュの後に来ます- セットとマップ。それらはそれぞれ、セット -順序付けられていないコレクション-およびマップです -キー付きアクセス権を持つコレクションが。彼らはたまたまハッシュで実装されています-それは名前が由来するところです-しかしそれらの本質は名前のその部分の後ろに隠されています。
それらの名前で混乱しないでください。彼らは深く異なるものです。
Hashset
内部の実装HashMap
。内部実装を確認すると、HashSetに挿入された値はHashMapにキーとして格納され、値はObjectクラスのダミーオブジェクトです。
HashMapとHashSetの違いは次のとおりです。
HashMap
キーと値のペアが含まれ、getメソッドがないためHashSetを毎回繰り返す必要があるため、各値にはキーでアクセスできます。HashMap
Mapインターフェースを実装し、1つのnull値をキーとして、複数のnull値を値として許可します。 HashSet
インターフェース実装する場合、1つのnull値のみを許可し、重複する値は許可しません(HashMapキーでは1つのnullキーを許可し、HashSetでは1つのnull値を許可します) HashSetはHashMapを内部的に実装しているため)。 HashSet
またHashMap
、反復中は挿入の順序は維持されません。名前が示すように、HashMap は連想マップ(キーから値へのマッピング)であり、HashSetは単なるSetです。
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に配置するが、JavaのHashMapにキーと値を挿入するためにput()メソッドを使用することです。
3) HashSetでは1つのnullキーしか許可されませんが、HashMapでは1つのnullキー+複数のnull値を許可できます。
JavaのHashSetとHashMapの違いは以上です。要約すると、HashSetとHashMapは2つの異なるタイプのコレクションで、1つはセットで、もう1つはマップです。
JavaでのHashSetとHashMapの違い
HashSetは内部的にHashMapを使用してオブジェクトを格納します。add(String)メソッドが呼び出されると、HahsMap put(key、value)メソッドが呼び出されます。ここで、key = Stringオブジェクト&value = new Object(Dummy)。オブジェクト。
Hashset / HashMapにキーとして格納されているオブジェクトは、ハッシュコードと等しいコントラクトをオーバーライドする必要があります。
HashMapで値オブジェクトにアクセス/格納するために使用されるキーは、Finalとして宣言する必要があります。変更されると、Valueオブジェクトが見つからず、nullを返すためです。
A HashMap
は、任意のタイプのカスタムキーによってインデックス付けされたオブジェクトを追加、取得、削除、...することです。
A HashSet
は、要素を追加、削除し、ハッシュを比較して要素が存在するかどうかを確認します。
したがって、HashMapには要素が含まれており、HashSetはそれらのハッシュを記憶しています。
equals()
メソッドを呼び出す。
違い:階層に関して:HashSetはSetを実装します。HashMapはMapを実装し、キーと値のマッピングを格納します。
データベースに関してHashSetとHashMapを使用すると、それぞれの重要性を理解するのに役立ちます。
HashSet:通常、一意のコレクションオブジェクトを格納するために使用されます。例:
クラスItemとClass Bidの
間の多対1の関係シップを格納するための実装クラスとして使用される場合があります(Itemには多数の入札があります)HashMap:キーを値にマップするために使用されます。値はnullまたは任意のオブジェクトです。 /オブジェクトのリスト(それ自体がオブジェクトです)。
HashSetはHashMapを内部的に使用して、そのエントリを格納します。内部HashMapの各エントリは単一のオブジェクトによってキーが付けられるため、すべてのエントリは同じバケットにハッシュされます。内部HashMapがその値を格納するために何を使用していたかは思い出しませんが、その内部コンテナーには重複した値が含まれることはないため、実際には問題になりません。
編集:マシューのコメントに対処するために、彼は正しいです。私はそれを逆にした。内部HashMapには、Set要素を構成するオブジェクトがキーとして設定されています。HashMapの値は、HashMapバケットに単に格納されるオブジェクトです。
HashMapはMapインターフェースの実装ですHashSetはSetインターフェースの実装です
HashMapキーと値のペアの形式でデータを格納しますHashSetオブジェクトのみを格納します
マップに要素を追加するためにPutメソッドが使用されますSet要素が追加されるために使用されるAddメソッドが使用されます
ハッシュマップでは、ハッシュコード値はキーオブジェクトを使用して計算されます。ここでメンバーオブジェクトは、2つのオブジェクトで同じになる可能性のあるハッシュコード値を計算するために使用されます。
一意のキーを使用してオブジェクトにアクセスするため、HashMapはハッシュセットよりも高速です。HashSetはHashmapよりも低速です。