Co to jest LinkedHashMap w Javie?
Klasa LinkedHashMap frameworka Collections jest implementacją Hashtable i LinkedList interfejsu Map . Przechowuje swoje wpisy w Hashtable i używa wewnętrznie podwójnie połączonej listy, aby zachować kolejność wstawiania. Ta LinkedList definiuje kolejność wstawiania, czyli kolejność wstawiania kluczy do mapy . HashMap zapewniał możliwość szybkiego wstawiania , wyszukiwania i usuwania , ale w LinkedHashMap implementacja LinkedList również zachowuje kolejność wstawiania.![LinkedHashMap w Javie - 1](https://cdn.codegym.cc/images/article/32fce3d5-f8bb-4b1a-86e6-6e596f8706e3/256.jpeg)
Funkcje LinkedHashMap
- Zawiera wartości oparte na kluczu.
- Zawiera unikalne elementy.
- Może mieć jeden klucz zerowy i wiele wartości zerowych.
- Jest niezsynchronizowany.
- Zachowuje kolejność wstawiania, co powoduje, że iteracja jest droższa.
Czynniki wydajności
Wydajność LinkedHashMap zależy głównie od dwóch czynników opisanych poniżej.Pojemność
Pojemność oznacza liczbę wpisów, które może przechowywać. Domyślna pojemność wynosi 16 , jeśli nie podano żadnego parametru. Współczynnik obciążenia Współczynnik obciążenia oznacza, że za każdym razem, gdy HashMap zostanie zapełniona do określonego procentu podanego jako parametr, tworzona jest nowa HashMap, która jest dwukrotnie większa i wszystkie wpisy są przenoszone do tej nowej. Domyślny współczynnik obciążenia dla HashMap wynosi 0,75 . Nazywa się go również współczynnikiem wypełnienia .Deklaracja LinkedHashMap
Aby utworzyć LinkedHashMap najpierw musimy zaimportować pakiet java.util.LinkedHashMap .LinkedHashMap<Key, Value> lhm = new LinkedHashMap<>(12, 0.5f);
Tutaj Klucz jest rodzajem kluczy na mapie. Wartość to typ mapowanych wartości na mapie. 12 to pojemność, co oznacza, że będzie przechowywać 12 wpisów na mapie. 0,5f to współczynnik obciążenia, co oznacza, że gdy zapełnione zostanie 50%, utworzy nową mapę i przeniesie wszystkie wartości do tej nowej.
Typowe metody LinkedHashMap
Oto lista niektórych typowych metod LinkedHashMap .Metody | Opis |
---|---|
jasne() | Usuwa wszystkie mapowania na mapie. |
zawieraWartość (wartość obiektu) | Zwraca wartość true, jeśli mapa odwzorowuje klucz na określoną wartość. |
zestaw wpisów() | Zwraca widok zestawu mapowań na mapie. |
pobierz (klucz obiektu) | Zwraca wartość względem określonego klucza lub wartość null, jeśli nie określono żadnego klucza. |
zestaw kluczy() | Zwraca widok zestawu kluczy na mapie. |
wartości() | Zwraca widok kolekcji wartości na mapie. |
getOrDefault (klucz obiektu, wartość domyślna V) | Zwraca wartość, z którą jest powiązany określony klucz, lub wartość domyślną, jeśli nie jest powiązany żaden klucz. |
Przykład LinkedHasMap
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating a LinkedHashMap of odd numbers
LinkedHashMap<String, Integer> oddNumbers = new LinkedHashMap<>();
// Using the put() method
oddNumbers.put("One", 1);
oddNumbers.put("Three", 3);
System.out.println("LinkedHashMap1: " + oddNumbers);
// Creating another LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("Two", 2);
// Using putAll() method
numbers.putAll(oddNumbers);
System.out.println("LinkedHashMap2: " + numbers);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
// Using keySet() method
System.out.println("Keys: " + numbers.keySet());
// Using values() method
System.out.println("Values: " + numbers.values());
// Using get() method
int value1 = numbers.get("Three");
System.out.println("Returned Number: " + value1);
// Using getOrDefault() method
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("Returned Number: " + value2);
// Using remove() method
int value = numbers.remove("Two");
System.out.println("Removed value: " + value);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
}
}
Wyjście
LinkedHashMap1: {Jeden=1, Trzy=3} LinkedHashMap2: {Dwa=2, Jeden=1, Trzy=3} Mapowania klucz/wartość: [Dwa=2, Jeden=1, Trzy=3] Klucze: [Dwa, Jeden , Three] Wartości: [2, 1, 3] Zwrócona liczba: 3 Zwrócona liczba: 5 Usunięta wartość: 2 Mapowania klucz/wartość: [Jeden=1, Trzy=3]
LinkedHashMap kontra HashMap
Zobaczmy pewne różnice między nimi, podczas gdy oba implementują interfejs Map .- LinkedHashMap utrzymuje kolejność wstawiania, ponieważ wewnętrznie implementuje listę podwójnie połączoną.
- LinkedHashMap potrzebuje więcej miejsca, ponieważ implementuje LinkedList .
- Jeśli chodzi o wydajność, LinkedHashMap jest wolniejszy niż HashMap .