Какова основная разница между словарем и Hashtable - PullRequest
5 голосов
/ 03 марта 2011

В чем разница между словарем и Hashtable. Как я могу прийти к выводу о том, что использовать? Может кто-нибудь, пожалуйста, помогите мне?

Ответы [ 3 ]

6 голосов
/ 03 марта 2011

Класс Dictionary отличается от класса Hashtable во многих отношениях, чем один.Помимо строгой типизации, Словарь также использует другую стратегию разрешения коллизий, чем класс Hashtable, используя технику, называемую сцеплением.

Вы можете прочитать эту статью: http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx#datastructures20_2_topic6

Это действительно полезно.

1 голос
/ 03 марта 2011

Я тоже новичок в хэш-таблицах, но ...

Словарь - это базовая таблица с двумя столбцами (Key и Value, оба имеют определенные типы) и множеством строк, которые вы добавите позже. Вы увидите, что в словаре вы даете ключ, а словарь дает вам значение, которое вы добавили ранее абсолютно одинаковым ключом.

В хеш-таблице все немного по-другому. У вас снова есть таблица с двумя столбцами (Key и Value, оба типа «объект»). Ключи могут быть не уникальными. Теперь у вас есть две таблицы: одна с двумя столбцами: Key и Hash, а другая с двумя столбцами Hash и Value. Hash - это целое число, полученное из Key. Оказывается, что, хотя ключи могут быть уникальными, хэши могут не быть. [Тем не менее, я не уверен в этом ... поэтому я сказал "виртуально" ...]

Теперь пример:

Hashtable ht = new Hashtable();
// Key of type Int32
ht[16] = "That is Int32";
// Key of type String
ht["Blah"] = 15;
// Key of type Boolean
ht[false] = "That is boolean";
// Key of type String
ht["Hohoho"] = false;

И позже вы можете получить доступ к любому значению, хранящемуся в Hashtable, просто используя ключи (если такого ключа нет, он возвращает ноль):

Console.WriteLine("ht[{0}] = {1};", 16, ht[16] ?? "null");
Console.WriteLine("ht[{0}] = {1};", "Test", ht["Test"] ?? "null"); // doesnt exist eh...
Console.WriteLine("ht[{0}] = {1};", false, ht[false] ?? "null");
Console.WriteLine("ht[{0}] = {1};", "Hohoho", ht["Hohoho"] ?? "null");

Подвести итог:

Словарь это:

[ Key ][ Value ]
   A      1.5
   B      1.6
   C      -8
     ....

И Хаштабл, вероятно, это:

[ Key ][ Hash ]
   A      1
   B      2
   C     -99
      ...

[ Hash ][ Value ]
   -99      -8
    1       1.6
    2       1.5
      ....

Надеюсь, это поможет. Любой, кто мог бы объяснить это лучше, не стесняйтесь делать это.

Спасибо и удачи.

1 голос
/ 03 марта 2011

Hashtable устарел. Всегда используйте словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...