Sobes.tech
Junior

Czym są HashMap i Set, i kiedy lepiej ich używać?

sobes.tech AI

Odpowiedź od AI

HashMap to kolekcja przechowująca pary klucz-wartość. Klucze są unikalne, a wartości mogą się powtarzać. Używa haszowania do szybkiego dostępu (średnio O(1)) do elementów po kluczu.

Set to kolekcja przechowująca unikalne elementy. Nie gwarantuje kolejności przechowywania, chyba że użyje się konkretnej implementacji (np. LinkedHashSet). Operacje dodawania, usuwania i sprawdzania obecności elementu zazwyczaj wykonują się w O(1). Istnieje wiele implementacji, np.:

  • HashSet: Nie gwarantuje kolejności elementów.
  • LinkedHashSet: Zachowuje kolejność dodawania elementów.
  • TreeSet: Przechowuje elementy w posortowanej kolejności.

Kiedy używać:

  • HashMap:
    • Gdy potrzebne jest szybkie wyszukiwanie, wstawianie lub usuwanie elementów po kluczu.
    • Do przechowywania danych asocjacyjnych (np. słownik).
    • Gdy trzeba szybko sprawdzić, czy wartość istnieje dla danego klucza.
  • Set:
    • Gdy konieczne jest przechowywanie tylko unikalnych elementów.
    • Do efektywnej weryfikacji, czy element znajduje się w kolekcji.
    • Do operacji na zbiorach (łączenie, przecięcie).

Przykład użycia HashMap:

// Tworzenie HashMap
HashMap<String, Integer> wiek = new HashMap<>();

// Dodawanie elementów
wiek.put("Alice", 30);
wiek.put("Bob", 25);
wiek.put("Charlie", 35);

// Pobieranie wartości po kluczu
int wiekBoba = wiek.get("Bob"); // wiekBoba = 25

// Sprawdzanie, czy klucz istnieje
boolean zawieraAlice = wiek.containsKey("Alice"); // zawieraAlice = true

Przykład użycia HashSet:

// Tworzenie HashSet
HashSet<String> imiona = new HashSet<>();

// Dodawanie elementów
imiona.add("Alice");
imiona.add("Bob");
imiona.add("Charlie");
imiona.add("Alice"); // Nie zostanie dodane, bo już istnieje

// Sprawdzanie, czy element istnieje
boolean zawieraBoba = imiona.contains("Bob"); // zawieraBoba = true

// Iteracja po elementach
for (String imie : imiona) {
    System.out.println(imie);
}