C# Java HashMap équivalent
Venant d'un monde Java en C# est là une HashMap équivalent? Si non, que me recommandez-vous?
Vous devez vous connecter pour publier un commentaire.
Venant d'un monde Java en C# est là une HashMap équivalent? Si non, que me recommandez-vous?
Vous devez vous connecter pour publier un commentaire.
Dictionnaire
est probablement le plus proche.System.Collections.Generic.Dictionary
met en œuvre laSystem.Les Collections.Génériques.IDictionary
de l'interface (qui est similaire à JavaMap
interface).Quelques différences notables que vous devriez être au courant:
put
etget
méthodes de réglage/mise élémentsmyMap.put(key, value)
MyObject value = myMap.get(key)
[]
d'indexation pour le réglage/mise élémentsmyDictionary[key] = value
MyObject value = myDictionary[key]
null
clésHashMap
permet clés nullDictionary
jette unArgumentNullException
si vous essayez d'ajouter une clé nullHashMap
va remplacer la valeur existante par la nouvelle.Dictionary
va remplacer la valeur existante par la nouvelle si vous utilisez[]
d'indexation. Si vous utilisez leAdd
méthode, qu'il va plutôt jeter unArgumentException
.HashMap
retournera null.Dictionary
va jeter unKeyNotFoundException
. Vous pouvez utiliser leTryGetValue
méthode au lieu de la[]
d'indexation pour éviter cela:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */}
Dictionary
's a uneContainsKey
méthode qui peut vous aider à composer avec les deux précédents problèmes.Dictionary
lève des Exceptions lors de l'ajout d'un double de la clé.if (!myDictionary.TryGetValue(key, value))
besoin d'unout
pour la deuxième argument. Doncif (!myDictionary.TryGetValue(key, out value))
TryGetValue
renvoie la valeur false, c' aussi définitvalue
àdefault
pour son type (généralement 0 ou la valeur null, ce qui serait similaire à ce queHashMap
retours). Donc, si vous êtes heureux avec ce que, dans certains cas, vous n'avez même pas besoin de vérifier le résultat booléen deTryGetValue
De C# équivalent à Java HashMap
J'ai besoin d'un Dictionnaire qui a accepté un "null" la clé, mais il ne semble pas natif, donc, j'ai écrit mon propre. C'est très simple, en fait. J'ai hérité du Dictionnaire, ajout d'un champ privé pour conserver la valeur pour la valeur "null", puis écrasé l'indexeur. Il va comme ceci :
Espère que cela aide quelqu'un dans l'avenir.
==========
Je l'ai modifié à ce format
Permettez-moi de vous aider à comprendre avec un exemple de "codaddict l'algorithme de"
'Dictionnaire en C#' est 'Hashmap en Java " dans l'univers parallèle.
Certaines implémentations sont différentes. Voir l'exemple ci-dessous pour mieux comprendre.
Déclarant Java HashMap:
Déclarant C# Dictionnaire:
L'obtention d'une valeur à partir d'un emplacement:
La définition de la valeur à l'emplacement:
Global d'un Exemple peut être observée à partir de ci-dessous Codaddict de l'algorithme.
codaddict de l'algorithme en Java:
Codaddict de l'algorithme en C#
Consultez la documentation MSDN pour la Hashtable classe.
Aussi, gardez à l'esprit que ce n'est pas thread-safe.
Dictionary<TKey, TValue>
est préférable, parce que du moment de la compilation, la vérification du type et parce qu'il ne nécessite pas de boxe de types de valeur.Utilisation du Dictionnaire - il utilise la table de hachage, mais est typesafe.
Aussi, votre code Java pour
sera mieux codé en C# de cette façon:
De cette façon, vous pouvez la portée de la nécessité de la variable "a" à l'intérieur d'un bloc et il est toujours accessible à l'extérieur du bloc si vous en avez besoin plus tard.
la réponse est
jeter un regard à ma fonction, sa simple d'ajouter des utilisations les plus importantes fonctions de membre à l'intérieur de Dictionnaire
cette fonction retourne false si la liste contient des Doublons éléments
Je voulais juste donner mon grain de sel.
C'est selon @Powerlord 's réponse.
Met "null" au lieu de null chaînes.