C# bietet im Gegensatz zu Java keine direkt als „HashMap“ bezeichnete Klasse. Die Klasse Dictionary<TKey, TValue>
bietet jedoch äquivalente Funktionalität und ist der empfohlene Ansatz für Hashmap-Operationen.
Inhaltsverzeichnis
Dictionary<TKey, TValue>
als Hashmap verwenden
Dictionary<TKey, TValue>
bietet einen Schlüssel-Wert-Speicher mit O(1) durchschnittlicher Zeitkomplexität für gängige Operationen wie Einfügen, Löschen und Abrufen. TKey
gibt den Schlüsseltyp an, und TValue
definiert den zugehörigen Werttyp. Lassen Sie uns die Verwendung untersuchen:
Dictionary erstellen und füllen:
// Ein Dictionary erstellen, um Strings als Schlüssel und Integer als Werte zu speichern.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
// Schlüssel-Wert-Paare mit Add() hinzufügen
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);
// Oder die Initialisierungssyntax für Sammlungen verwenden:
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
{"grape", 4},
{"orange", 5}
};
Werte zugreifen:
Rufen Sie Werte mithilfe ihrer Schlüssel ab. TryGetValue()
ist sicherer als die direkte Indizierung und behandelt Fälle, in denen der Schlüssel fehlt:
int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
Console.WriteLine($"Anzahl Äpfel: {appleCount}"); // Ausgabe: Anzahl Äpfel: 1
}
else
{
Console.WriteLine("Apfel nicht gefunden.");
}
// Direkter Zugriff (wirft KeyNotFoundException, wenn der Schlüssel fehlt)
try
{
Console.WriteLine($"Anzahl Bananen: {myDictionary["banana"]}"); // Ausgabe: Anzahl Bananen: 2
}
catch (KeyNotFoundException)
{
Console.WriteLine("Schlüssel nicht gefunden.");
}
Durch ein Dictionary iterieren:
Console.WriteLine("Dictionary Inhalt:");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
Console.WriteLine($"Schlüssel: {kvp.Key}, Wert: {kvp.Value}");
}
Elemente entfernen:
myDictionary.Remove("banana");
Prüfen auf Schlüssel Existenz:
if (myDictionary.ContainsKey("cherry"))
{
Console.WriteLine("Kirsche existiert.");
}
Erweiterte Verwendung und Überlegungen
Für Szenarien, die Thread-Sicherheit erfordern, ziehen Sie ConcurrentDictionary<TKey, TValue>
in Betracht. Stellen Sie bei der Auswahl von Schlüsseln sicher, dass diese GetHashCode()
und Equals()
korrekt implementieren, um Kollisionen zu vermeiden und die Effizienz der Hashmap aufrechtzuerhalten. Das Verständnis dieser Aspekte ist entscheidend für optimale Leistung.
Fazit
Dictionary<TKey, TValue>
in C# ist das effektive Äquivalent einer HashMap und bietet eine hervorragende Leistung für die Schlüssel-Wert-Speicherung. Seine Vielseitigkeit, kombiniert mit der Verfügbarkeit von threadsicheren Alternativen, macht es zu einer fundamentalen Datenstruktur für diverse C#-Anwendungen.