Junior
Was ist der Unterschied zwischen den Schnittstellen List und Set in Java?
sobes.tech KI
Antwort von AI
Die wichtigsten Unterschiede zwischen den Schnittstellen List und Set in Java sind die folgenden:
-
Reihenfolge der Elemente:
Listbewahrt die Reihenfolge der Hinzufügung der Elemente. Elemente haben Indizes, die bei 0 beginnen.Setgarantiert die Reihenfolge der Elemente nicht. Einige Implementierungen können eine bestimmte Reihenfolge haben (z.B.LinkedHashSet,TreeSet), aber dieSet-Schnittstelle fordert dies nicht.
-
Duplikate:
Listerlaubt doppelte Elemente.Seterlaubt keine Duplikate. Beim Versuch, ein Duplikat hinzuzufügen, wird die Operation ignoriert oderfalsezurückgegeben (je nach Implementierung und Methode).
-
Leistung:
- Hinzufügen- und Entfernen-Operationen in der Mitte einer
Listkönnen langsamer sein (besonders beiArrayList) als in einemSet. - Die Überprüfung, ob ein Element vorhanden ist (
contains) in einem auf Hashing (HashSet) basierendenSetist in der Regel schneller (durchschnittlich O(1)) im Vergleich zu einerList(durchschnittlich O(n)). - Indexbasierte Operationen (
get,set) sind nur inListverfügbar.
- Hinzufügen- und Entfernen-Operationen in der Mitte einer
-
Implementierungen:
- Typische
List-Implementierungen:ArrayList,LinkedList,Vector. - Typische
Set-Implementierungen:HashSet,LinkedHashSet,TreeSet.
- Typische
Hier sind Beispiele, die die Unterschiede demonstrieren:
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 erlaubt Duplikate und bewahrt die Reihenfolge
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Doppelte hinzufügen
System.out.println("List: " + list); // Zeigt [Apple, Banana, Apple]
System.out.println("List bei Index 1: " + list.get(1)); // Zugriff per Index
// Set erlaubt keine Duplikate und die Reihenfolge ist nicht garantiert (bei HashSet)
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Versuch, ein Duplikat hinzuzufügen - wird ignoriert
System.out.println("Set: " + set); // Zeigt etwas wie [Apple, Banana] oder [Banana, Apple]
// set.get(1); // Kompilierungsfehler - kein Zugriff per Index
}
}
Vergleichstabelle:
| Merkmal | List | Set |
|---|---|---|
| Reihenfolge | Garantiert (Einfügereihenfolge) | Nicht garantiert (bei HashSet, TreeSet hat sortierte Reihenfolge) |
| Duplikate | Erlaubt | Nicht erlaubt |
| Zugriff per Index | Möglich (get(int index)) |
Nicht möglich |
| Leistung contains() | O(n) im Durchschnitt (bei ArrayList) | O(1) im Durchschnitt (bei HashSet) |
| Typische Implementierungen | ArrayList, LinkedList, Vector | HashSet, LinkedHashSet, TreeSet |