2009-06-10 17 views

risposta

21

Essi risolvono diversi problemi, LinkedHashMap esegue una mappatura delle chiavi ai valori, un LinkedHashSet memorizza semplicemente una raccolta di elementi senza duplicati.

Un legata mappa hash è per le coppie chiave/valore di mappatura - ad esempio, i nomi di memorizzazione e le età:

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

D'altra parte, un insieme di hash è collegato per la memorizzazione di una raccolta di una cosa - - nomi, ad esempio:

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

Stavo solo cercando il codice sorgente di ArrayList solo per essere sicuro di dover usare un Set (che ha buone prestazioni di ricerca) invece di un ArrayList (che deve attraversare tutti i record per trovare qualcosa) –

+4

Lo scopo di LinkedHashMap su HashMap è che LinkedHashMap utilizza anche una LinkedList internamente per memorizzare l'ordine in cui sono state aggiunte le coppie chiave/valore.Quindi l'iterazione su LinkedHashMap darà come risultato coppie chiave/valore nell'ordine in cui sono state aggiunte mentre una HashMap classica verrà iterata in base all'ordine del codice hash di ciascuna chiave. –

+1

Questo è corretto, ma dal momento che la domanda stava confrontando LinkedHashMaps in LinkedHashSets ho deciso di concentrarmi sulle differenze, piuttosto che sui punti in comune. :-) – Benson

2

Uno è un set e uno è una mappa. Scegli la struttura dati corretta per un determinato scenario.

3

Un set ha solo valori, non è possibile inserire duplicati. Una mappa ha una coppia chiave/valore. Hanno usi diversi.

Un set verrà utilizzato come raccolta, passando in un gruppo di oggetti, mentre una mappa è utile quando si dispone di una chiave univoca per identificare ciascun elemento e si desidera poter accedervi tramite tale chiave.

5

LinkedHashSet contengono internamente una lista doppiamente concatenata che attraversa tutte le voci che definisce l'ordine degli elementi. Questa classe consente elementi null.

Questa implementazione di classe non è sincronizzata, quindi deve essere sincronizzata esternamente. LinkedHashMap non può essere sincronizzata e deve essere sincronizzato esternamente

Ad esempio:

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

Tranne che memorizza LinkedHashSet valori singoli per ciascun elemento e memorizza LinkedHashMap pair valore di chiave /.
Nello schema seguente è possibile vedere java.util.Collections. scatole solidi mostrano implementazione della classe concreta
alt text http://www.softfinity.com/diag1.png

2

LinkedHashMap e LinkedHashSet ha una sola differenza e che viene da HashMap e HashSet differenza, i loro genitori. Ancora una volta, HashSet è solo una variazione di HashMap. Puoi dire HashSet come HashMap con tutti i valori che puntano a un singolo oggetto finale. Pertanto, entrambi non ti danno molte differenze.

Utilizzando LinkedHashSet, sarà necessario utilizzare un solo oggetto finale diverso dalle chiavi. Utilizzando LinkedHashMap, se si impostano valori come nulli per tutte le chiavi, è meglio di LinkedHashSet anche per Imposta scopo.

Problemi correlati