HashSet vs. Liste in C#

Muhammad Maisam Abbas 16 Februar 2024
  1. HashSet<T> in C#
  2. Liste<T> in C#
  3. HashSet<T> vs. List<T> in C#
HashSet vs. Liste in C#

Dieses Tutorial behandelt die Unterschiede und Ähnlichkeiten zwischen einem HashSet<T> und einer List<T> in C#.

HashSet<T> in C#

Die mathematische Definition einer Menge ist eine ungeordnete Sammlung unterschiedlicher Objekte. Auch die HashSet-Datenstruktur in C# folgt dem gleichen Prinzip.

Ein HashSet ist eine Sammlung sich nicht wiederholender Objekte, die keiner bestimmten Reihenfolge folgen. Ein HashSet wird im Allgemeinen verwendet, wenn wir keine doppelten Werte in unseren Daten haben möchten.

Es ist eine generische Sammlung, die im Namensraum System.Collection.Generic enthalten ist.

Ein Vorteil von HashSet ist, dass wir alle Mengenoperationen wie Vereinigung, Schnittmenge und Mengendifferenz anwenden können. Ein bemerkenswerter Nachteil bei der Verwendung eines HashSet ist, dass wir es nicht sortieren können, da es keiner bestimmten Reihenfolge folgt.

Das folgende Code-Snippet zeigt uns, wie wir mit Hash-Sets in C# arbeiten können.

HashSet<int> weirdNumbers = new HashSet<int>();
weirdNumbers.Add(10);
weirdNumbers.Add(13);
weirdNumbers.Add(17);
weirdNumbers.Add(78);
weirdNumbers.Add(13);

Console.WriteLine("HashSet before removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}
weirdNumbers.Remove(13);
Console.WriteLine("HashSet after removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}

Ausgabe:

HashSet before removal
10
13
17
78
HashSet after removal
10
17
78

Wir haben im obigen Codebeispiel gezeigt, wie wir ein generisches Hash-Set erstellen, Werte darin einfügen, sie aus dem Hash-Set entfernen und sie innerhalb des Hash-Sets drucken können.

Die Funktion Add() innerhalb der Klasse HashSet<T> wird verwendet, um einen einzelnen Wert in das Hash-Set einzufügen. Neben der Funktion Add() werden innerhalb der Klasse HashSet<T> viele weitere nützliche Funktionen bereitgestellt.

Die Funktion Remove(T val) entfernt val aus unserem Hash-Set. Es nimmt den Wert als Eingabeparameter und entfernt ihn aus unserem Hash-Set.

Liste<T> in C#

In C# ist eine Liste eine Sammlung stark typisierter Objekte. Auf die Elemente einer Liste kann über einen Index zugegriffen werden.

Ein Listenobjekt enthält viele nützliche Methoden zum Sortieren, Suchen und Ändern einer Liste. Es ist im Namespace System.Collection.Generic enthalten.

Ein weiterer Vorteil von Listen besteht darin, dass sie eine Typüberprüfung zur Kompilierungszeit bieten und kein Boxing/Unboxing durchführen, da sie generisch sind. Eine Liste vom Datentyp T kann mit List<T> initialisiert werden.

Die folgenden Codeausschnitte zeigen, wie wir mit Listen in C# arbeiten können.

List<int> weirdNumbers = new List<int>();
weirdNumbers.Add(10);
weirdNumbers.Add(17);
weirdNumbers.Add(78);
weirdNumbers.Add(13);
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}

Ausgabe:

10
17
78
13

Im obigen Code haben wir die Liste der Ganzzahlen weirdNumbers in der ersten Zeile initialisiert, Werte mit der Funktion Add() in die Liste eingefügt und eine foreach-Schleife verwendet, um alle Werte in der Liste auszugeben.

Die Funktion Add() innerhalb der Klasse List<T> wird verwendet, um Werte in die Liste einzufügen. Neben der Funktion Add() werden innerhalb der Klasse List<T> viele weitere nützliche Funktionen bereitgestellt.

Die Funktion AddRange() kann ein weiteres Array oder eine Liste in eine bestehende Liste einfügen. Es nimmt die Liste oder das Array als Eingabeparameter und hängt die Elemente der Liste oder des Arrays am Ende der Primärliste an.

Wir können auch die Funktion Insert() verwenden, um einen einzelnen Wert an einem bestimmten Index in die Liste einzufügen. Die Funktion Insert() nimmt den ganzzahligen Index und den Wert vom Typ T als Eingabeparameter.

Wir haben viel über das Hinzufügen neuer Elemente zu einer Liste gesprochen. Lassen Sie uns diskutieren, wie wir vorhandene Elemente aus einer Liste entfernen können.

Die Funktion Remove(T val) entfernt das erste Vorkommen von val in unserer Liste. Es nimmt den Wert als Eingabeparameter und entfernt das erste Vorkommen dieses Werts in unserer Liste, beginnend mit Index 0.

Die Funktion RemoveAt(int index) entfernt den Wert an einem bestimmten Index innerhalb unserer Liste. Es nimmt den Index als Eingabeparameter und entfernt jeden Wert, der platziert wird.

Das folgende Code-Snippet fasst alle besprochenen Funktionen in einem hübschen kleinen Block zusammen.

List<int> weirdNumbers = new List<int>();
weirdNumbers.Add(10);
weirdNumbers.Add(17);
weirdNumbers.Add(78);
weirdNumbers.Add(13);
weirdNumbers.Insert(3, 31);
Console.WriteLine("List before removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}
weirdNumbers.Remove(31);
weirdNumbers.RemoveAt(1);
Console.WriteLine("List after removal");
foreach (int val in weirdNumbers) {
  Console.WriteLine(val);
}

Ausgabe:

List before removal
10
17
78
31
13
List after removal
10
78
13

Wir haben im obigen Codebeispiel gezeigt, wie wir eine generische Liste erstellen, Werte einfügen, Werte aus der Liste entfernen und die Werte innerhalb der Liste drucken können.

HashSet<T> vs. List<T> in C#

Sowohl Listen als auch Hash-Sets haben ihre Vor- und Nachteile gegenüber einander. Während Hash-Sets für große Datenmengen viel schneller sind als Listen, bieten Listen Indizierungsfunktionen.

Während wir Listen sortieren können, bieten Hash-Sets die Möglichkeit, Set-Operationen durchzuführen.

Zusammenfassend, Listen oder Hash-Sets, die Wahl hängt vollständig von unserem Problem ab.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Csharp List