Есть ли что-нибудь, что может сделать hashmap, но карта не может? - PullRequest
5 голосов
/ 30 марта 2010

Я знаю только, что разница между hashmap и map заключается в том, что hashmap реализован с помощью функции hash, а map - с деревом Может ли тело добавить что-нибудь еще?

Исходя из этого, есть ли что-нибудь, что может сделать hashmap, но карта не может?

Ответы [ 3 ]

10 голосов
/ 30 марта 2010
  • Хэш-карты в среднем имеют лучшую производительность для доступа (O (1)), но хуже в худшем случае (O (n)). Карты всегда O (LG (N)).

  • Карты упорядочены по ключу, а хэш-карты - нет.

  • Хэш-карты обычно используют больше памяти, чем карты.

  • Карты обычно допускают более быструю итерацию.

  • Хорошие хеш-функции сложнее написать, чем хорошие упорядочивающие функции (и сложнее проанализировать).

Я не верю, что есть что-то, что может сделать хеш-карта, чего не может карта.

3 голосов
/ 30 марта 2010

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

0 голосов
/ 30 марта 2010

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

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

...