2009-06-10 7 views

Répondre

21

Ils résolvent différents problèmes, LinkedHashMap fait un mappage des clés aux valeurs, un LinkedHashSet stocke simplement une collection de choses sans doublons.

Un lien carte de hachage est pour les paires clé de cartographie/valeur - par exemple, stocker les noms et les âges:

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

D'autre part, un ensemble de hachage lié est pour stocker une collection d'une chose - - les noms, par exemple:

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

Je regardais juste le code source de ArrayList juste pour m'assurer que je devais utiliser un Set (qui a une bonne performance de recherche) au lieu d'un ArrayList (qui doit traverser tous les enregistrements pour trouver quelque chose) –

+4

Le but de LinkedHashMap sur HashMap, LinkedHashMap utilise également une LinkedList en interne pour stocker l'ordre dans lequel les paires clé/valeur ont été ajoutées.Donc itérer sur LinkedHashMap donnera lieu à une paire clé/valeur dans l'ordre dans lequel ils ont été ajoutés alors qu'un HashMap classique ira en fonction de l'ordre du hashcode de chaque clé. –

+1

C'est exact, mais comme la question consistait à comparer LinkedHashMaps à LinkedHashSets, j'ai décidé de me concentrer sur les différences plutôt que sur les points communs. :-) – Benson

2

On est un ensemble, et on est une carte. Choisissez la structure de données correcte pour un scénario donné.

3

Un ensemble ne contient que des valeurs, vous ne pouvez pas insérer de doublons. A La carte possède une paire clé/valeur. Ils ont des utilisations différentes. Un ensemble sera utilisé comme une collection, en passant dans un groupe d'objets, alors qu'une carte est utile lorsque vous avez une clé unique pour identifier chaque élément et que vous voulez pouvoir y accéder avec cette clé.

5

LinkedHashSet contiennent en interne une liste doublement chaînée qui traverse toutes ses entrées qui définit l'ordre des éléments. Cette classe autorise les éléments NULL.

Cette implémentation de classe n'est pas synchronisée, elle doit donc être synchronisée de manière externe. LinkedHashMap n'est pas synchronisé soit et doit être synchronisé en externe

Par exemple: paire

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

autre que celui des magasins de LinkedHashSet valeurs uniques par élément et stocke LinkedHashMap valeur clé /.
Dans le diagramme ci-dessous, vous pouvez voir java.util.Collections. boîtes solides montrent la mise en œuvre de classe concrète
alt text http://www.softfinity.com/diag1.png

2

LinkedHashMap et LinkedHashSet n'a qu'une seule différence et qui vient par HashMap et HashSet différence, leurs parents. Encore une fois, HashSet est juste une variation de HashMap. Vous pouvez indiquer HashSet comme HashMap avec toutes les valeurs pointant vers un seul objet final. Par conséquent, les deux ne vous donnent pas beaucoup de différences.

En utilisant LinkedHashSet, vous devez utiliser un seul objet final autre que vos clés. En utilisant LinkedHashMap, si vous définissez des valeurs comme nulles pour toutes les clés, alors c'est mieux que LinkedHashSet pour Set.

Questions connexes