Korzystanie z tablic asocjacyjnych

Java:
Korzystanie z tablic asocjacyjnych

Jak to zrobić:

Java nie posiada wbudowanych tablic asocjacyjnych, jak niektóre języki, ale udostępnia interfejs Map oraz klasy takie jak HashMap i TreeMap, by spełnić tę rolę. Oto jak użyć HashMap:

import java.util.HashMap;
import java.util.Map;

public class LearnMaps {
    public static void main(String[] args) {
        // Tworzenie HashMap
        Map<String, Integer> wiekPrzyjaciol = new HashMap<>();
        
        // Dodawanie elementów
        wiekPrzyjaciol.put("Alice", 24);
        wiekPrzyjaciol.put("Bob", 30);
        wiekPrzyjaciol.put("Charlie", 28);

        // Dostęp do elementów
        System.out.println("Wiek Alice: " + wiekPrzyjaciol.get("Alice"));
        
        // Obsługa kluczy nieistniejących
        System.out.println("Wiek osoby nieobecnej na mapie: " + wiekPrzyjaciol.getOrDefault("Dan", -1));

        // Iteracja po elementach
        for (Map.Entry<String, Integer> wpis : wiekPrzyjaciol.entrySet()) {
            System.out.println(wpis.getKey() + " ma " + wpis.getValue() + " lat(a).");
        }
    }
}

Przykładowe wyjście:

Wiek Alice: 24
Wiek osoby nieobecnej na mapie: -1
Alice ma 24 lata.
Bob ma 30 lat.
Charlie ma 28 lat.

HashMap to tylko jedna z implementacji. Jeśli twoje klucze są unikalne i potrzebujesz ich posortowania, rozważ TreeMap. Dla mapy, która zachowuje kolejność wstawiania, LinkedHashMap jest Twoim przyjacielem.

Głębsze zanurzenie

Mapy w Javie są częścią Frameworka Kolekcji, wprowadzonego w JDK 1.2, ale z czasem doczekały się znaczących ulepszeń, w tym wprowadzenia metody forEach w Java 8 dla łatwiejszej iteracji po wpisach. Wybór implementacji mapy (HashMap, LinkedHashMap, TreeMap) powinien być dyktowany konkretnymi potrzebami w zakresie porządkowania i wydajności. Na przykład, HashMap oferuje wydajność czasową O(1) dla podstawowych operacji (get i put), zakładając, że funkcja hash rozdziela elementy odpowiednio pomiędzy kubełki. Jednakże, jeśli potrzebujesz sortowania na podstawie naturalnego porządkowania lub niestandardowych komparatorów, TreeMap jest najlepszym wyborem, oferując O(log n) czasu dla wstawiania i wyszukiwania.

Przed wprowadzeniem Map, tablice asocjacyjne były zazwyczaj implementowane za pomocą dwóch równoległych tablic (jednej dla kluczy, drugiej dla wartości) lub niestandardowych struktur danych o mniejszej wydajności. Obecne alternatywy dla Map i jej implementacji mogą obejmować biblioteki stron trzecich oferujące specjalizowane mapy, takie jak mapy dwukierunkowe (BiMap w bibliotece Google’s Guava) na wypadek, gdy potrzebujesz efektywnie znaleźć klucz po jego wartości. Jednakże, dla większości przypadków użycia w Javie, mapy biblioteki standardowej są wystarczająco solidne i elastyczne, aby sprostać zadaniu.