Sobes.tech
Junior

Kas yra HashMap ir Set, ir kada geriausia juos naudoti?

sobes.tech AI

Atsakymas iš AI

HashMap – tai raktų ir reikšmių porų saugykla. Raktai yra unikalūs, o reikšmės gali kartotis. Naudoja maišą (hashing) greitam prieigos (vidutiniškai O(1)) prie elementų pagal raktą.

Set – tai unikalių elementų kolekcija. Nenurodo saugojimo tvarkos, jei nėra naudojama konkreti įgyvendinimo forma (pvz., LinkedHashSet). Operacijos pridėjimas, pašalinimas ir elemento buvimo patikrinimas vidutiniškai vykdomi per O(1). Yra įvairių įgyvendinimų, pvz.,

  • HashSet: neapibrėžia elementų tvarkos.
  • LinkedHashSet: išsaugo elementų pridėjimo tvarką.
  • TreeSet: saugo elementus surūšiuotoje tvarkoje.

Kada naudoti:

  • HashMap:
    • Kai reikalingas efektyvus paieška, įterpimas ar ištrynimas pagal raktą.
    • Laikyti susietus duomenis (pvz., žodyną).
    • Greitai patikrinti, ar yra reikšmė pagal raktą.
  • Set:
    • Kai reikia saugoti tik unikalius elementus.
    • Efektyviai patikrinti, ar kolekcijoje yra elementas.
    • Atlikti rinkinių operacijas (sujungimas, sankirta).

HashMap pavyzdys:

// HashMap sukūrimas
HashMap<String, Integer> amžius = new HashMap<>();

// Elementų pridėjimas
amžius.put("Alice", 30);
amžius.put("Bob", 25);
amžius.put("Charlie", 35);

// Reikšmės gavimas pagal raktą
int BobAmžius = amžius.get("Bob"); // BobAmžius = 25

// Raktų buvimo patikrinimas
boolean turiAlice = amžius.containsKey("Alice"); // turiAlice = true

HashSet pavyzdys:

// HashSet sukūrimas
HashSet<String> vardai = new HashSet<>();

// Elementų pridėjimas
vardai.add("Alice");
vardai.add("Bob");
vardai.add("Charlie");
vardai.add("Alice"); // nepridės, nes Alice jau yra

// Elemento buvimo patikrinimas
boolean turiBob = vardai.contains("Bob"); // turiBob = true

// Pereiti per elementus
for (String vardas : vardai) {
    System.out.println(vardas);
}