Vindo de um mundo Java para um C #, existe um equivalente HashMap? Se não, o que você recomendaria?
326
Dictionary
é provavelmente o mais próximo. System.Collections.Generic.Dictionary
implementa a System.Collections.Generic.IDictionary
interface (que é semelhante à Map
interface do Java ).
Algumas diferenças notáveis das quais você deve estar ciente:
put
e get
para configurar / obter itens
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
indexação para definir / obter itens
myDictionary[key] = value
MyObject value = myDictionary[key]
null
chaves
HashMap
permite chaves nulasDictionary
lança um ArgumentNullException
se você tentar adicionar uma chave nulaHashMap
substituirá o valor existente pelo novo.Dictionary
substituirá o valor existente pelo novo se você usar a []
indexação. Se você usar o Add
método, ele lançará um ArgumentException
.HashMap
retornará nulo.Dictionary
lançará um KeyNotFoundException
. Você pode usar o TryGetValue
método em vez da []
indexação para evitar isso:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
possui um ContainsKey
método que pode ajudar a lidar com os dois problemas anteriores.
Dictionary
lança exceções ao adicionar uma chave duplicada.if (!myDictionary.TryGetValue(key, value))
precisa de umout
para o segundo argumento. Entãoif (!myDictionary.TryGetValue(key, out value))
De C # equivalente ao Java HashMap
Eu precisava de um dicionário que aceitasse uma chave "nula", mas parece não haver uma nativa, por isso escrevi a minha. É muito simples, na verdade. Eu herdei do Dictionary, adicionei um campo privado para armazenar o valor da chave "null" e depois substituí o indexador. É assim:
Espero que isso ajude alguém no futuro.
==========
Eu o modifiquei para este formato
fonte
Deixe-me ajudá-lo a entender isso com um exemplo do "algoritmo do codaddict"
' Dicionário em C #' é ' Hashmap em Java' no universo paralelo.
Algumas implementações são diferentes. Veja o exemplo abaixo para entender melhor.
Declarando o Java HashMap:
Declarando o dicionário C #:
Obtendo um valor de um local:
Definindo um valor no local:
Um exemplo geral pode ser observado abaixo do algoritmo do Codaddict.
algoritmo do codaddict em Java:
Algoritmo do codaddict em C #
fonte
Confira a documentação no MSDN para a classe Hashtable .
Além disso, lembre-se de que isso não é seguro para threads.
fonte
Dictionary<TKey, TValue>
é preferível, devido à verificação do tipo de tempo de compilação e porque não requer boxe dos tipos de valor.Use Dictionary - usa hashtable, mas é tipicamente seguro.
Além disso, seu código Java para
será melhor codificado em C # desta maneira:
Dessa forma, você pode definir a necessidade da variável "a" dentro de um bloco e, ainda assim, ela pode ser acessada fora do bloco, se você precisar dela mais tarde.
fonte
a resposta é
veja minha função, seu simples add usa as funções membro mais importantes dentro do Dictionary
essa função retornará false se a lista contiver itens duplicados
fonte
Eu só queria dar meus dois centavos.
Isso está de acordo com a resposta do @Powerlord.
Coloca "nulo" em vez de cadeias nulas .
fonte