В чем разница между Картой и Словарем?

В чем разница между Map и a Dictionary? Я не прошу, как они определены на языке X или Y (что, как кажется, обычно спрашивают здесь люди на SO), я хочу знать, какова их различие в теории.

Я знаю, что Map - это объект, который сопоставляет ключи значениям. Разве это не Dictionary? Что их отличает?

4b9b3361

Два термина для одной и той же вещи

"Карта" используется Java, С++
"Словарь" используется .Net, Python
"Ассоциативный массив" используется Javascript, PHP

"Карта" - правильный математический термин, но его избегают, поскольку он имеет отдельный смысл в функциональном программировании .

Смотрите здесь.

162
ответ дан 21 мая '10 в 20:30
источник

Один - это более старый термин для другого. Обычно термин "Словарь" использовался до того, как математическая терминология "Карта" взяла верх. Кроме того, словари, как правило, имеют ключевой тип String, но это не 100% истинно во всем мире.

14
ответ дан 21 мая '10 в 20:14
источник

Обычно я предполагаю, что карта поддерживается хэш-таблицей; это означает неупорядоченный магазин. Словари означают упорядоченное хранилище.

Существует древовидный словарь, называемый Trie.

В Lisp он может выглядеть так:

(a (n (d t)) n d )

Что инкапсулирует слова:

  • a
  • и
  • ant
  • a
  • объявления

Обход от вершины к листу дает слово.

3
ответ дан 21 мая '10 в 20:19
источник

Мои 2 цента.

Словарь - это абстрактный класс в Java, тогда как Map - это интерфейс. Поскольку Java не поддерживает множественные наследования, если класс расширяет словарь, он не может распространять какой-либо другой класс.

Поэтому был введен интерфейс карты.

Класс словаря устарел и предпочтительным является использование карты.

2
ответ дан 04 нояб. '14 в 9:41
источник

так на чисто теоретическом уровне.

Словарь - это значение, которое можно использовать для определения привязанного значения. Карта представляет собой значение, которое содержит инструкции по поиску других значений

все коллекции, которые допускают нелинейный доступ (т.е. только первый или последний), являются Map, так как даже простой массив имеет индекс, который соответствует правильному значению. Таким образом, хотя словарь является типом карты, карты представляют собой гораздо более широкий диапазон возможных функций.

В Практике a обычно используется функция сопоставления, которая определяет имя, поэтому HashMap представляет собой отображаемую структуру данных, которая использует алгоритм хеширования для привязки ключа к значению, где в Словаре не указывается, как связаны ключи к значению, поэтому его можно сохранить через связанный список, дерево или любой другой алгоритм. от конца использования вы, как правило, не заботитесь о том, какой алгоритм работает только потому, что вы используете общий словарь и только переходите к одной из других структур только тогда, когда вам нужно указать тип алгоритма

1
ответ дан 22 сент. '15 в 15:45
источник

Да, они одинаковы, вы можете добавить в ассоциацию "Ассоциативный массив".

с использованием Hashtable или Hash ofter относится к реализации.

1
ответ дан 21 мая '10 в 20:34
источник

Не совсем то же самое. Карты - это подмножество словаря. Словарь определяется здесь как имеющий функции вставки, удаления и поиска. Карта, используемая Java (согласно this) - это словарь с требованием, чтобы сопоставление ключей со значениями строго отображалось как взаимно-однозначное функция. Словарь может иметь более одной ключевой карты для одного значения или одну ключевую карту для нескольких значений (например, цепочки в хэш-таблице), например, поиск в хэштаге Twitter.

В качестве более "реального мира" пример поиска слова в словаре может дать нам ряд определений для одного и того же слова, и когда мы найдем запись, которая указывает нам на другую запись (см. другое слово), количество слов для одного и того же списка определений. В реальном мире карты намного шире, что позволяет нам иметь места для имен или имен для координат, но также мы можем найти ближайший сосед или другие атрибуты (популяции и т.д.), Поэтому ИМХО может быть аргументом для большего расширения тип карты, возможно, имеет реализацию на основе графа, но было бы лучше всегда принимать только пару ключ-значение, тем более что ближайший сосед и другие атрибуты значения могут быть просто членами данных значения.

java-карты, несмотря на требование "один-к-одному", могут реализовать нечто большее, чем обобщенный словарь, если значение обобщается как сама коллекция или значения являются просто ссылками на коллекции, хранящиеся в другом месте.

Помните, что разработчики Java не являются сторонниками определений ADT и что решения Java специально предназначены для Java.

1
ответ дан 13 июля '16 в 17:47
источник

Основное отличие состоит в том, что Карта требует, чтобы все записи (значение и пара ключей) имели уникальный ключ. Если возникают столкновения, т.е. Когда новая запись имеет тот же ключ, что и запись, уже находящаяся в коллекции, требуется обработка конфликтов.

Обычно мы обрабатываем конфликты, используя либо Разделить цепочку. Или Линейное исследование.

A Словарь позволяет связать несколько записей с одним и тем же ключом.

Когда на карте реализована отдельная цепочка, она похожа на словарь.

0
ответ дан 07 июня '17 в 12:25
источник

Другие термины для этого понятия, которые довольно распространены: ассоциативный массив и хэш.

0
ответ дан 21 мая '10 в 20:18
источник

Это два разных термина для одной и той же концепции.
Hashtable и HashMap также относятся к одной и той же концепции.

-2
ответ дан 21 мая '10 в 20:13
источник