Sobes.tech
Junior

Opowiedz o kolekcji Map w Java i jej cechach.

sobes.tech AI

Odpowiedź od AI

Map — to interfejs w Java Collection Framework, reprezentujący kolekcję par "klucz-wartość". Klucze są unikalne, a wartości mogą się powtarzać.

Główne cechy:

  • Klucz służy do dostępu do odpowiadającej mu wartości.
  • Ten sam klucz nie może być dodany dwukrotnie. Przy próbie dodania istniejącego klucza, stare wartość zostaje zastąpiona nową.
  • Map nie dziedziczy po interfejsie Collection. Ma własne metody do pracy z parami "klucz-wartość".
  • Kolejność par "klucz-wartość" może się różnić w zależności od konkretnej implementacji.

Popularne implementacje Map:

  • HashMap: Nie gwarantuje kolejności elementów. Zapewnia wysoką wydajność dla większości operacji (wstawianie, pobieranie, usuwanie) przy braku konfliktów hash.
  • LinkedHashMap: Przechowuje elementy w kolejności ich dodania (lub w kolejności dostępu, jeśli jest odpowiednio skonfigurowany).
  • TreeMap: Przechowuje elementy w posortowanej kolejności według klucza (kolejność naturalna lub dostarczona przez komparator). Zapewnia czas logarytmiczny dla większości operacji.

Przykłady metod:

// Pobierz wartość po kluczu
Object value = map.get(key);

// Dodaj lub zaktualizuj parę klucz-wartość
Object oldValue = map.put(key, value);

// Usuń parę po kluczu
Object removedValue = map.remove(key);

// Sprawdź, czy klucz istnieje
boolean containsKey = map.containsKey(key);

// Sprawdź, czy wartość istnieje
boolean containsValue = map.containsValue(value);

// Pobierz zbiór wszystkich kluczy
Set<KeyType> keys = map.keySet();

// Pobierz zbiór wszystkich wartości
Collection<ValueType> values = map.values();

// Pobierz zbiór wszystkich wpisów (par klucz-wartość)
Set<Map.Entry<KeyType, ValueType>> entries = map.entrySet();

// Pobierz rozmiar Mapy
int size = map.size();

Użycie Map.Entry podczas iteracji:

// Iteracja po zbiorze Entry
for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
    KeyType key = entry.getKey();
    ValueType value = entry.getValue();
    // ...
}