Мой вопрос в значительной степени о том, что выше. Согласно диаграммам, которые я вижу в хэш-таблице, это выглядит, например:Есть ли разница между массивом связанных списков и таблицей хэшей?
Hashtable temp1 = new Hashtable (20);
SList [] temp2 = новый SList [20];
Предполагая, что SList является одиночным списком, не является temp1 почти таким же, как temp2? Я просто пытаюсь понять хэш-таблицы немного лучше. Благодаря!
Эти два отличные. Хэш-таблица индексируется каким-то объектом, называемым ключом типа с четко определенной операцией, называемой 'hash', определенной на нем. В зависимости от значения хеша пара (Key, Value) сохраняется в соответствующем месте в хеш-таблице. Вообще хеш-функции должны иметь совершенно разные значения для почти одинаковых объектов. Hashtables использует списки, чтобы заботиться о столкновениях - разные ключи могут давать один и тот же хеш - если это так, они сохраняются в одном и том же месте (в соответствующем списке) в этой модели разрешения столкновений. Hashtables может использовать массивы списков внутри. – lared
Я понимаю, что вы имеете в виду, но предположим, что вы определили отдельный класс HashTableImplementation с конструктором, являющимся массивом одиночных связанных списков. Поскольку вы используете одиночные связанные списки, столкновение уже позаботится, и вы можете сортировать значения одного и того же ключа в любом случае. Если вы добавили хэш-метод в HashTableImplementation, а также метод функции сжатия к нему, не могли бы вы иметь то же самое, что и хеш-таблица? – Iche
Да. Но вы могли бы также использовать другой метод разрешения конфликтов, и он был бы еще хэш-таблицей. Что используется внутри - будь то массив связанных списков или просто простой массив, это просто деталь реализации. – lared