Sobes.tech
Junior

Ce sunt HashMap și Set și în ce cazuri este mai bine să le folosiți?

sobes.tech AI

Răspuns de la AI

HashMap este o colecție care stochează perechi cheie-valoare. Cheile sunt unice, iar valorile pot fi repetate. Utilizează hashing pentru acces rapid (în medie O(1)) la elemente după cheie.

Set este o colecție care stochează elemente unice. Nu garantează ordinea de stocare, cu excepția cazului în care se utilizează o implementare specifică (de exemplu, LinkedHashSet). Operațiile de adăugare, ștergere și verificare a existenței unui element sunt, în general, efectuate în O(1). Există diferite implementări, de exemplu:

  • HashSet: Nu garantează ordinea elementelor.
  • LinkedHashSet: Păstrează ordinea de adăugare a elementelor.
  • TreeSet: Stochează elementele în ordine sortată.

Când să folosiți:

  • HashMap:
    • Când aveți nevoie de căutare, inserare sau ștergere eficientă după cheie.
    • Pentru stocarea datelor asociative (de exemplu, dicționar).
    • Când trebuie verificată rapid existența unei valori după cheie.
  • Set:
    • Când trebuie să stocați doar elemente unice.
    • Pentru verificarea eficientă dacă un element există în colecție.
    • Pentru operații pe mulțimi (uniune, intersecție).

Exemplu de utilizare a HashMap:

// Creare HashMap
HashMap<String, Integer> vârste = new HashMap<>();

// Adăugare elemente
vârste.put("Alice", 30);
vârste.put("Bob", 25);
vârste.put("Charlie", 35);

// Obținerea valorii după cheie
int vârstaBobi = vârste.get("Bob"); // vârstaBobi = 25

// Verificarea dacă o cheie există
boolean conțineAlice = vârste.containsKey("Alice"); // conțineAlice = true

Exemplu de utilizare a HashSet:

// Creare HashSet
HashSet<String> nume = new HashSet<>();

// Adăugare elemente
nume.add("Alice");
nume.add("Bob");
nume.add("Charlie");
nume.add("Alice"); // Nu va fi adăugat, deoarece deja există

// Verificare dacă un element există
boolean conțineBob = nume.contains("Bob"); // conțineBob = true

// Iterare peste elemente
for (String numeElement : nume) {
    System.out.println(numeElement);
}