Sobes.tech
Junior

Wat is het verschil tussen de interfaces List en Set in Java?

sobes.tech AI

Antwoord van AI

De belangrijkste verschillen tussen de interfaces List en Set in Java zijn als volgt:

  • Volgorde van elementen:

    • List behoudt de volgorde van toevoeging van elementen. Elementen hebben indices die beginnen bij 0.
    • Set garandeert de volgorde van elementen niet. Sommige implementaties kunnen een bepaalde volgorde hebben (bijvoorbeeld LinkedHashSet, TreeSet), maar de Set-interface vereist dit niet.
  • Duplicaten:

    • List staat toe dat er dubbele elementen zijn.
    • Set staat geen duplicaten toe. Bij het proberen toe te voegen van een duplicaat wordt de operatie genegeerd of geeft false terug (afhankelijk van de implementatie en methode).
  • Prestaties:

    • Toevoeg- en verwijderbewerkingen in het midden van een List kunnen trager zijn (vooral voor ArrayList) dan in een Set.
    • Controle of een element bestaat (contains) in een op hashing (HashSet) gebaseerde Set is meestal sneller (gemiddeld O(1)) vergeleken met een List (gemiddeld O(n)).
    • Indexgebaseerde operaties (get, set) zijn alleen beschikbaar in List.
  • Implementaties:

    • Typische List-implementaties: ArrayList, LinkedList, Vector.
    • Typische Set-implementaties: HashSet, LinkedHashSet, TreeSet.

Hier zijn voorbeelden die de verschillen illustreren:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class CollectionDifferences {

    public static void main(String[] args) {

        // List staat toe dat duplicaten bestaan en behoudt de volgorde
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Apple"); // Toevoegen van een duplicaat
        System.out.println("List: " + list); // Toont [Apple, Banana, Apple]
        System.out.println("Element op index 1: " + list.get(1)); // Toegang via index

        // Set staat geen duplicaten toe en de volgorde is niet gegarandeerd (voor HashSet)
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // Poging tot toevoegen van duplicaat - wordt genegeerd
        System.out.println("Set: " + set); // Toont iets als [Apple, Banana] of [Banana, Apple]
        // set.get(1); // Compileerfout - geen toegang via index
    }
}

Vergelijkingstabel:

Kenmerk List Set
Volgorde Gegarandeerd (volgorde van toevoegen) Niet gegarandeerd (voor HashSet, TreeSet heeft gesorteerde volgorde)
Duplicaten Toegestaan Niet toegestaan
Toegang via index Mogelijk (get(int index)) Onmogelijk
Prestaties contains() O(n) gemiddeld (voor ArrayList) O(1) gemiddeld (voor HashSet)
Typische implementaties ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet