2009-06-10 12 views

答えて

21

彼らは異なる問題を解決します.LinkedHashMapはキーの値へのマッピングを行いますが、LinkedHashSetは重複のないもののコレクションを格納するだけです。

Aは、ハッシュ・マップがマッピングのキー/値のペアのためにあるリンク - 例えば、保存名前と年齢:

Map<String,Integer> namesAndAges = new LinkedHashMap<String,Integer>(); 
namesAndAges.put("Benson", 25); 
namesAndAges.put("Fred", 19); 

一方、リンクハッシュセットは一つのコレクションを格納するためのものです - - たとえば名前は、:

Set<String> names = new LinkedHashSet<String>(); 
names.add("Benson"); 
names.add("Fred"); 
+1

ArrayListのソースコードを探していましたが、ArrayListの代わりにSet(良い検索パフォーマンスがあります)を使用しなければならないことを確認しました(すべてのレコードを調べて何かを見つける必要があります) –

+4

LinkedHashMapの目的HashMap上では、LinkedHashMapはLinkedListを内部的に使用して、キーと値のペアが追加された順序を格納します。LinkedHashMapを反復すると、追加された順序でキーと値のペアが生成され、古典的なHashMapは各キーのハッシュコードの順序に基づいて反復処理されます。 –

+1

これは間違いありませんが、LinkedHashMapsとLinkedHashSetsを比較しているので、共通点ではなく違いに注目することにしました。 :-) – Benson

2

1つはセット、1つはマップです。特定のシナリオに適したデータ構造を選択します。

3

セットに値があり、重複を入れることはできません。マップにはキーと値のペアがあります。彼らはさまざまな用途を持っています。

セットは、オブジェクトのグループを渡すコレクションとして使用されますが、マップは、各要素を識別するユニークなキーがあり、そのキーでアクセスできるようにする場合に便利です。

5

LinkedHashSetのは、内部要素の順序を定義し、そのエントリのすべてを実行している二重リンクリストが含まれています。 このクラスはnull要素を許可します。

このクラスの実装は同期されていないため、外部と同期する必要があります。 のLinkedHashMapは、いずれかの同期化されず、例えば外部

同期させる必要があります。その要素ごとLinkedHashSetの店単一値とのLinkedHashMap記憶キー/値のペア以外

Map map = Collections.synchronizedMap(new LinkedHashMap()); 


下の図には、java.util.Collectionsがあります。ソリッドボックスは
alt text http://www.softfinity.com/diag1.png

2

LinkedHashMapLinkedHashSetは一つだけ違いがある具象クラスの実装を示し、それはHashMapHashSet違い、両親によって来ます。再び、HashSetは、HashMapの単なる変更です。 HashSetHashMapと言うことができ、すべての値が単一の最終オブジェクトを指しています。したがって、それらの両方はあなたに大きな違いを与えません。

LinkedHashSetを使用すると、キー以外の最終的なオブジェクトは1つだけ使用することになります。 LinkedHashMapを使用すると、すべてのキーで値をnullに設定すると、Set目的のLinkedHashSetよりも優れています。

関連する問題