Gibt es ein HashMap-Äquivalent, wenn Sie aus einer Java-Welt in eine C # -Ele kommen? Wenn nicht, was würden Sie empfehlen?
325
Dictionary
ist wahrscheinlich der nächste. System.Collections.Generic.Dictionary
implementiert die System.Collections.Generic.IDictionary
Schnittstelle (die der Java- Map
Schnittstelle ähnlich ist ).
Einige bemerkenswerte Unterschiede, die Sie beachten sollten:
put
und get
zum Festlegen / Abrufen von Elementen
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
Indizierung zum Festlegen / Abrufen von Elementen
myDictionary[key] = value
MyObject value = myDictionary[key]
null
Schlüssel
HashMap
erlaubt NullschlüsselDictionary
löst einen aus, ArgumentNullException
wenn Sie versuchen, einen Nullschlüssel hinzuzufügenHashMap
ersetzt den vorhandenen Wert durch den neuen.Dictionary
ersetzen den vorhandenen Wert durch den neuen, wenn Sie die []
Indizierung verwenden. Wenn Sie die Add
Methode verwenden, wird stattdessen eine ausgelöst ArgumentException
.HashMap
null zurück.Dictionary
werfen a KeyNotFoundException
. Sie können die TryGetValue
Methode anstelle der []
Indizierung verwenden, um dies zu vermeiden:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
's hat eine ContainsKey
Methode, die helfen kann, die beiden vorherigen Probleme zu lösen.
Dictionary
Löst Ausnahmen aus, wenn ein duplizierter Schlüssel hinzugefügt wird.if (!myDictionary.TryGetValue(key, value))
braucht einout
für das zweite Argument. Alsoif (!myDictionary.TryGetValue(key, out value))
Von C # entspricht Java HashMap
Ich brauchte ein Wörterbuch, das einen "Null" -Schlüssel akzeptierte, aber es scheint keinen nativen zu geben, also habe ich mein eigenes geschrieben. Eigentlich ist es sehr einfach. Ich habe von Dictionary geerbt, ein privates Feld hinzugefügt, um den Wert für den Schlüssel "null" zu speichern, und dann den Indexer überschrieben. Es geht so :
Hoffe das hilft jemandem in der Zukunft.
==========
Ich habe es auf dieses Format geändert
quelle
Lassen Sie mich Ihnen anhand eines Beispiels für den "Codaddict-Algorithmus" helfen, dies zu verstehen.
' Dictionary in C #' ist ' Hashmap in Java' im Paralleluniversum.
Einige Implementierungen sind unterschiedlich. Sehen Sie sich das folgende Beispiel an, um es besser zu verstehen.
Java HashMap deklarieren:
C # -Wörterbuch deklarieren:
Abrufen eines Werts von einem Standort:
Festlegen eines Werts am Standort:
Ein Gesamtbeispiel kann unter dem Codaddict-Algorithmus beobachtet werden.
Codaddict-Algorithmus in Java:
Codaddict's Algorithmus in C #
quelle
Lesen Sie die Dokumentation zu MSDN für die Hashtable- Klasse.
Beachten Sie auch, dass dies nicht threadsicher ist.
quelle
Dictionary<TKey, TValue>
ist vorzuziehen, da die Überprüfung des Typs zur Kompilierungszeit erfolgt und kein Boxen von Werttypen erforderlich ist.Wörterbuch verwenden - Es verwendet eine Hashtabelle, ist jedoch typsicher.
Auch Ihr Java-Code für
wird am besten in C # wie folgt codiert:
Auf diese Weise können Sie die Notwendigkeit der Variablen "a" innerhalb eines Blocks erfassen und sie ist auch außerhalb des Blocks verfügbar, wenn Sie sie später benötigen.
quelle
die Antwort ist
Schauen Sie sich meine Funktion an, deren einfaches Hinzufügen die wichtigsten Elementfunktionen im Wörterbuch verwendet
Diese Funktion gibt false zurück, wenn die Liste doppelte Elemente enthält
quelle
Ich wollte nur meine zwei Cent geben.
Dies entspricht der Antwort von @Powerlord.
Setzt "null" anstelle von null Zeichenfolgen.
quelle