2013-04-29 25 views
11

HashMapHashSetより速い理由を読んだり調べたりしています。なぜHashMapはHashSetより速いのですか?

私は非常に次の文を理解していないです:値は一意のキーに関連付けられているため

  1. HashMapHashSetよりも高速です。

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

  3. HashMapハッシュコード値は、キーオブジェクトを使用して計算されます。ここでは、メンバーオブジェクトを使用してハッシュコードを計算します。ハッシュコードは2つのオブジェクトで同じにすることができるため、equals()メソッドを使用して等価性をチェックします。 falseが返された場合は、2つのオブジェクトが異なることを意味します。

私の質問締結する:

  1. を私はHashMapHashSetが同じようにハッシュコードを計算すると思いました。彼らはなぜ異なっているのですか?

  2. HashSetHashMapでハッシュコードの計算方法が異なる具体的な例を教えてください。

  3. 「キーオブジェクト」は何かを知っていますが、「メンバーオブジェクト」はどういう意味ですか?

  4. HashMapと同じものをHashSetと同じように実行できます。なぜHashSetが必要なのですか?例:

    HashMap <Object1, Boolean>= new HashMap<Object1, boolean>(); 
    map.put("obj1",true); => exist 
    map.get("obj1"); =>if null = not exist, else exist 
    
+3

'Map'と' Set'の違いについてお読みください。それらは2つの異なるタイプの 'Collection'です。これをやったら、マップから特定のオブジェクトを取得するほうが、セットよりも速いのはなぜかは明らかです。 – Magnilex

+0

ハッシュセットはHashMap上に構築されています。セットは一意性のために使用されます。キーバリューペアコレクションではありません。 –

+0

はい。私は彼らが異なるインターフェイスを実装知っている。しかし、ハッシュセットはバックエンドでハッシュマップを使用していると言う人もいます。それが真実ならば、ハッシュマップはハッシュマップより遅くなるのはなぜですか? – runcode

答えて

18

パフォーマンス:

あなたはHashSetの(少なくともJDK 6、図7、図8)、それは内部HashMapを使用してのソースコードを見て、それは基本的に正確にない場合サンプルコードで何をやっているのですか?

Set実装が必要な場合は、Map - HashMapが必要な場合は、HashSetを使用します。 HashSetではなくHashMapを使用するコードは、HashSetを直接使用するのとまったく同じパフォーマンスを持ちます。値にマップキー(連想配列) - - http://en.wikipedia.org/wiki/Associative_array

右コレクションに

地図を選択します。

セット - 重複する要素を含まないコレクション - http://en.wikipedia.org/wiki/Set_(computer_science)

あなたのコレクションが必要なのは、要素がそこに存在するかどうかをチェックすることだけです。セットを使用してください。あなたのコードはより洗練され、他の人には分かりやすくなります。

要素のデータを保存する必要がある場合は、マップを使用します。

+2

デニスが言ったこと。また、Collections.newSetFromMapを使用して、セットでマップをラップすることもできます。 –

0

なぜ HashMapがHashSetより高速ですか。彼らはどちらもハッシュコードを計算する必要がありますが、HashMapのキーの性質について考えてください - 通常は単純なStringか数字です。ハッシュコードの計算は、オブジェクト全体のデフォルトのハッシュコード計算よりもはるかに高速です。 HashMapのキーがHashSetに格納されているものと同じオブジェクトだった場合、パフォーマンスに大きな違いはありません。違いは、どのような種類のオブジェクトがHashMapのキーであるかです。

関連する問題