Sobes.tech
Junior

Wat zijn HashMap en Set, en in welke gevallen is het beter om ze te gebruiken?

sobes.tech AI

Antwoord van AI

HashMap is een collectie die paren van sleutel en waarde opslaat. De sleutels zijn uniek, en de waarden kunnen herhaald worden. Het gebruikt hashing voor snelle toegang (gemiddeld O(1)) tot de elementen via de sleutel.

Set is een collectie die unieke elementen opslaat. Het garandeert niet de volgorde van opslag, tenzij een specifieke implementatie wordt gebruikt (bijvoorbeeld LinkedHashSet). De operaties toevoegen, verwijderen en controleren of een element aanwezig is, worden meestal in O(1) uitgevoerd. Er zijn verschillende implementaties, bijvoorbeeld:

  • HashSet: Garandeert geen volgorde van de elementen.
  • LinkedHashSet: Behoudt de volgorde van invoer.
  • TreeSet: Slaat de elementen op in gesorteerde volgorde.

Wanneer gebruiken:

  • HashMap:
    • Wanneer snelle zoekopdrachten, invoegen of verwijderen op basis van de sleutel nodig zijn.
    • Voor het opslaan van geassocieerde gegevens (bijvoorbeeld woordenboek).
    • Wanneer snel moet worden gecontroleerd of een waarde bestaat voor een sleutel.
  • Set:
    • Wanneer alleen unieke elementen nodig zijn.
    • Voor efficiënte controle of een element in de collectie aanwezig is.
    • Voor bewerkingen op verzamelingen (unie, doorsnede).

Voorbeeld van gebruik van HashMap:

// HashMap maken
HashMap<String, Integer> leeftijden = new HashMap<>();

// Elementen toevoegen
leeftijden.put("Alice", 30);
leeftijden.put("Bob", 25);
leeftijden.put("Charlie", 35);

// Waarde ophalen op basis van sleutel
int leeftijdBob = leeftijden.get("Bob"); // leeftijdBob = 25

// Controleren of een sleutel bestaat
boolean bevatAlice = leeftijden.containsKey("Alice"); // bevatAlice = true

Voorbeeld van gebruik van HashSet:

// HashSet maken
HashSet<String> namen = new HashSet<>();

// Elementen toevoegen
namen.add("Alice");
namen.add("Bob");
namen.add("Charlie");
namen.add("Alice"); // Wordt niet toegevoegd, omdat al aanwezig

// Controleren of een element aanwezig is
boolean bevatBob = namen.contains("Bob"); // bevatBob = true

// Over elementen itereren
for (String naam : namen) {
    System.out.println(naam);
}