2009-06-10 13 views

Odpowiedz

21

Rozwiązują one różne problemy, LinkedHashMap mapuje klucze do wartości, LinkedHashSet po prostu przechowuje kolekcję rzeczy bez duplikatów.

Połączony hash mapa jest dla par klucz/wartość mapowania - na przykład zapisywanie nazw i wiekowe:

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

Z drugiej strony, połączony zestaw hash jest do przechowywania kolekcji z jednej strony - - nazwy, na przykład:

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

Właśnie szukałem kodu źródłowego tablicy ArrayList, aby upewnić się, że muszę użyć zestawu (który ma dobrą wydajność wyszukiwania) zamiast ArrayList (który musi przechodzić wszystkie rekordy, aby znaleźć coś) –

+4

Celem LinkedHashMap ponad HashMap jest to, że LinkedHashMap również wewnętrznie wykorzystuje LinkedList do przechowywania porządku, w którym zostały dodane pary klucz/wartość.Zatem iteracja na LinkedHashMap spowoduje utworzenie pary klucz/wartość w kolejności, w jakiej zostały dodane, podczas gdy klasyczna HashMap będzie iterować w oparciu o kolejność kodu skrótu każdego klucza. –

+1

To prawda, ale ponieważ pytanie było porównywanie LinkedHashMaps do LinkedHashSets postanowiłem skupić się na różnicach, a nie na wspólnych cechach. :-) – Benson

2

Jeden to zestaw, a to mapa. Wybierz poprawną strukturę danych dla danego scenariusza.

3

Zestaw ma prawidłowe wartości, nie można umieścić duplikatów. Mapa ma parę klucz/wartość. Mają różne zastosowania.

Zestaw zostanie użyty jako kolekcja, przechodząc w grupie obiektów, podczas gdy mapa jest przydatna, gdy masz unikalny klucz do identyfikacji każdego elementu i chcesz mieć do niego dostęp za pomocą tego klucza.

5

LinkedHashSet wewnętrznie zawierają podwójnie połączonej listy biegnącej przez wszystkich swoich wpisów, które określa kolejność elementów. Ta klasa zezwala na elementy puste.

Ta implementacja klasy nie jest zsynchronizowana, dlatego należy ją zsynchronizować zewnętrznie. LinkedHashMap nie jest zsynchronizowany albo i muszą być zsynchronizowane z zewnątrz

Na przykład:

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

Inne niż przechowująca LinkedHashSet pojedynczych wartości na elemencie i LinkedHashMap sklepach pary wartość klucza /.
Na poniższym diagramie widać java.util.Collections. skrzynie stałe pokazać konkretną implementację klasy
alt text http://www.softfinity.com/diag1.png

2

LinkedHashMap i LinkedHashSet ma tylko jedną różnicę i że przychodzi HashMap i HashSet różnicy, ich rodziców. Ponownie, HashSet jest po prostu odmianą HashMap. Możesz powiedzieć HashSet jako HashMap ze wszystkimi wartościami wskazującymi na pojedynczy obiekt końcowy. Dlatego oba nie dają dużych różnic.

Używając LinkedHashSet, będziesz używać tylko jednego końcowego obiektu, innego niż klucze. Korzystanie z LinkedHashMap, jeśli ustawisz wartości jako null dla wszystkich kluczy, to jego lepsze niż LinkedHashSet dla Set celu również.

Powiązane problemy