Venant d'un monde Java en C #, existe-t-il un équivalent HashMap? Sinon, que recommanderiez-vous?
326
Dictionary
est probablement le plus proche. System.Collections.Generic.Dictionary
implémente l' System.Collections.Generic.IDictionary
interface (qui est similaire à l' Map
interface de Java ).
Quelques différences notables dont vous devez être conscient:
put
et get
pour définir / obtenir des éléments
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
indexation pour définir / obtenir des éléments
myDictionary[key] = value
MyObject value = myDictionary[key]
null
clés
HashMap
autorise les clés nullesDictionary
lance un ArgumentNullException
si vous essayez d'ajouter une clé nulleHashMap
remplacera la valeur existante par la nouvelle.Dictionary
remplaceront la valeur existante par la nouvelle si vous utilisez l' []
indexation. Si vous utilisez la Add
méthode, elle lancera un an ArgumentException
.HashMap
retournera null.Dictionary
va lancer un KeyNotFoundException
. Vous pouvez utiliser la TryGetValue
méthode au lieu de l' []
indexation pour éviter cela:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
a une ContainsKey
méthode qui peut aider à résoudre les deux problèmes précédents.
Dictionary
lève des exceptions lors de l'ajout d'une clé dupliquée.if (!myDictionary.TryGetValue(key, value))
a besoin d'unout
pour le deuxième argument. Doncif (!myDictionary.TryGetValue(key, out value))
De l' équivalent C # à Java HashMap
J'avais besoin d'un dictionnaire qui acceptait une clé "nulle", mais il ne semble pas y en avoir de natif, j'ai donc écrit le mien. C'est très simple, en fait. J'ai hérité de Dictionary, ajouté un champ privé pour contenir la valeur de la clé "null", puis écrasé l'indexeur. Ça va comme ça :
J'espère que cela aidera quelqu'un à l'avenir.
==========
Je l'ai modifié dans ce format
la source
Permettez-moi de vous aider à le comprendre avec un exemple de "l'algorithme de codaddict"
' Dictionary in C #' est ' Hashmap in Java' dans l'univers parallèle.
Certaines implémentations sont différentes. Voir l'exemple ci-dessous pour mieux comprendre.
Déclaration de Java HashMap:
Déclaration du dictionnaire C #:
Obtenir une valeur à partir d'un emplacement:
Définition d'une valeur à l'emplacement:
Un exemple global peut être observé sous l'algorithme de Codaddict.
algorithme de codaddict en Java:
Algorithme de Codaddict en C #
la source
Consultez la documentation sur MSDN pour la classe Hashtable .
N'oubliez pas non plus que ce n'est pas thread-safe.
la source
Dictionary<TKey, TValue>
est préférable, en raison de la vérification du type de temps de compilation et parce qu'il ne nécessite pas de mise en boîte des types de valeur.Utiliser le dictionnaire - il utilise une table de hachage mais est sûr pour les types.
De plus, votre code Java pour
sera mieux codé en C # de cette façon:
De cette façon, vous pouvez définir le besoin de la variable "a" à l'intérieur d'un bloc et elle est toujours accessible en dehors du bloc si vous en avez besoin plus tard.
la source
la réponse est
jetez un oeil à ma fonction, son simple ajout utilise les fonctions membres les plus importantes dans Dictionary
cette fonction renvoie false si la liste contient des éléments en double
la source
Je voulais juste donner mes deux cents.
C'est selon la réponse de @Powerlord.
Met "null" au lieu de chaînes nulles .
la source