Исходя из мира Java в C #, есть ли эквивалент HashMap? Если нет, что бы вы порекомендовали?
326
Dictionary
вероятно, ближайший System.Collections.Generic.Dictionary
реализует System.Collections.Generic.IDictionary
интерфейс (который похож на Map
интерфейс Java ).
Некоторые заметные различия, о которых вы должны знать:
put
и get
методы для установки / получения элементов
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
индексацию для установки / получения элементов
myDictionary[key] = value
MyObject value = myDictionary[key]
null
ключи
HashMap
допускает нулевые ключиDictionary
выдает, ArgumentNullException
если вы пытаетесь добавить нулевой ключHashMap
заменит существующее значение новым.Dictionary
заменит существующее значение новым, если вы используете []
индексацию. Если вы используете Add
метод, он вместо этого бросит ArgumentException
.HashMap
вернет ноль.Dictionary
бросит KeyNotFoundException
. Вы можете использовать TryGetValue
метод вместо []
индексации, чтобы избежать этого:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
У нас есть ContainsKey
метод, который может помочь справиться с двумя предыдущими проблемами.
Dictionary
выдает исключения при добавлении дублированного ключа.if (!myDictionary.TryGetValue(key, value))
нуженout
для второго аргумента. Итакif (!myDictionary.TryGetValue(key, out value))
Из C # эквивалент Java HashMap
Мне нужен был словарь, который принимал «нулевой» ключ, но, похоже, его не было, поэтому я написал свой собственный. Это очень просто, на самом деле. Я унаследовал от словаря, добавил личное поле для хранения значения для «нулевого» ключа, а затем переписать индексатор. Это выглядит так:
Надеюсь, это поможет кому-то в будущем.
==========
Я изменил его в этот формат
источник
Позвольте мне помочь вам понять это на примере «алгоритма codaddict»
« Словарь в C #» - это « Hashmap в Java» в параллельной вселенной.
Некоторые реализации отличаются. Смотрите пример ниже, чтобы лучше понять.
Объявление Java HashMap:
Объявление словаря C #:
Получение значения из местоположения:
Установка значения на месте:
Общий пример можно наблюдать из алгоритма Codaddict.
Алгоритм codaddict в Java:
Алгоритм Codaddict в C #
источник
Ознакомьтесь с документацией по MSDN для класса Hashtable .
Кроме того, имейте в виду, что это не потокобезопасно.
источник
Dictionary<TKey, TValue>
предпочтительнее из-за проверки типов времени компиляции и потому, что она не требует упаковки типов значений.Используйте словарь - он использует хеш-таблицу, но безопасен.
Кроме того, ваш код Java для
будет лучше всего кодироваться в C # таким образом:
Таким образом, вы можете ограничить потребность в переменной «a» внутри блока, и она будет по-прежнему доступна за пределами блока, если она понадобится вам позже.
источник
ответ
взгляните на мою функцию, ее простое добавление использует наиболее важные функции-члены внутри словаря
эта функция возвращает false, если список содержит элементы Duplicates
источник
Я просто хотел дать свои два цента.
Это согласно ответу @Powerlord.
Ставит «ноль» вместо нулевых строк.
источник