HashSet
が重複値を許可しないという事実とは別に、HashMap
とHashSet
の違いは何ですか?
実装は賢明ですか?どちらもhash tablesを使用して値を保存するため、少しあいまいです。
それらはまったく異なる構成です。 HashMap
は、Map
の実装です。 A Map は、キーを値にマップします。キーの検索はハッシュを使用して行われます。
一方、HashSet
はSet
の実装です。 Set は、セットの数学モデルに一致するように設計されています。既に説明したように、HashSet
はHashMap
を使用して実装をバックアップします。ただし、完全に異なるインターフェイスを実装します。
目的に最適なCollection
を探す場合、この Tutorial が出発点として適しています。何が起こっているのか本当に知りたい場合は、 そのための本があります もです。
HashSetはsetです。 {1,2,3,4,5}
HashMapはkey-> value(key to value)マップです。 {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で始まるのは本当に残念です。それはそれらの最も重要でない部分です。他の人が指摘したように、重要な部分はHash-SetおよびMapの後にあります。それぞれ、Set-順不同のコレクション-およびMap-キー付きアクセスのコレクションです。それらはたまたまハッシュで実装されています-それが名前の由来です-しかし、その本質は名前のその部分の後ろに隠されています。
名前で混同しないでください。それらは非常に異なるものです。
HashSetを使用すると、オブジェクトをセットに格納できます。HashMapを使用すると、キーと値に基づいてオブジェクトを格納できます。すべてのオブジェクトまたは保存されたオブジェクトにはキーがあります。
名前が示すように、HashMapは連想Map(キーから値へのマッピング)、HashSetは単なる設定。
Hashset
は、HashMap
を内部的に実装します。内部 実装 が表示される場合、HashSetに挿入された値はHashMapにキーとして格納され、値はObjectクラスのダミーオブジェクトです。
HashMapとHashSetの違いは:-
HashMap
にはキーと値のペアが含まれ、getメソッドがないため、HashSetを毎回繰り返す必要があるため、キーによって各値にアクセスできます。HashMap
はMapインターフェースを実装し、1つのnull値をキーとして、複数のnull値を値として許可します。HashSet
はSetインターフェースを実装します。 HashMapキーで許可されているため、HashSetの1つのnull値はHashSet実装としてHashMapを内部的に実装しています)。HashSet
およびHashMap
は、反復中に挿入の順序を維持しません。HashMap
は、任意のタイプのカスタムキーでインデックス付けされたオブジェクトを追加、取得、削除、...することです。
A HashSet
は、要素を追加し、要素を削除し、ハッシュを比較して要素が存在するかどうかを確認します。
そのため、HashMapには要素が含まれ、HashSetにはそのハッシュが記憶されます。
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つはマップです。
違い:階層に関して:HashSetはSetを実装します。 HashMapはMapを実装し、キーと値のマッピングを保存します。
データベースに関してHashSetとHashMapを使用すると、それぞれの重要性を理解するのに役立ちます。
HashSet:は、通常、一意のコレクションオブジェクトの格納に使用されます。例:多対1のリレーションシップを格納するための実装クラスとして使用できます
class ItemおよびClass Bid where(Item has many bids)HashMap:は、キーを値にマッピングするために使用されます。値は、nullまたはObjectのObject/list(それ自体がオブジェクトです)の場合があります。
JavaでのHashSetとHashMapの違い
HashSetは内部的にHashMapを使用してオブジェクトを格納します。add(String)メソッドが呼び出されると、HahsMap put(key、value)メソッドを呼び出します。ここで、key = String object&value = new Object(Dummy)。オブジェクト。
hashset/HashMapにキーとして保存されているオブジェクトは、ハッシュコードと等しいコントラクトをオーバーライドする必要があります。
HashMapの値オブジェクトにアクセス/格納するために使用されるキーは、Finalとして宣言する必要があります。これは、値オブジェクトが変更されると、Valueオブジェクトが見つからず、nullを返すためです。
HashSetは、HashMapを内部的に使用してそのエントリを保存します。内部HashMapの各エントリは単一のオブジェクトによってキー設定されるため、すべてのエントリは同じバケットにハッシュされます。内部HashMapが値を格納するために使用するものを思い出しませんが、その内部コンテナーには重複した値が含まれないため、それは実際には重要ではありません。
EDIT:マシューのコメントに対処するために、彼は正しい。私はそれを後方に持っていました。内部HashMapはキー設定されていますSet要素を構成するオブジェクトを使用。 HashMapの値は、HashMapバケットに単に格納されているオブジェクトです。
HashMap
はMap
の実装であり、値の重複を許可しますが、キーの重複ではありませんを許可します。オブジェクトを追加するには、キー/値のペアが必要です。 NullキーとNull値が許可されます。例えば:
{The-> 3、world-> 5、is-> 2、Nice-> 4}
HashSet
はSet
の実装であり、重複を許可しないを実行します。重複オブジェクト、public boolean add(Object o)
メソッドの呼び出しを追加しようとした場合、セットは変更されずに残り、false
を返します。例えば:
[The、world、is、Nice]