Разница между HashSet и HashMap? - PullRequest
155 голосов
/ 05 мая 2010

Помимо того, что HashSet не допускает дублирование значений, в чем разница между HashMap и HashSet?

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

Ответы [ 19 ]

1 голос
/ 05 мая 2010

A HashMap - для добавления, получения, удаления, ... объектов, проиндексированных пользовательским ключом любого типа.
HashSet - для добавления элементов, удаления элементов и проверки наличия элементов путем сравнения их хешей.

Итак, HashMap содержит элементы, а HashSet запоминает их хеши.

0 голосов
/ 05 мая 2010

A HashSet реализован в виде HashMap . Это отображение между ключом и НАСТОЯЩИМ объектом.

0 голосов
/ 24 января 2016

HashMap - это реализация Map, позволяющая дублировать значения , но не дублировать ключи. . Для добавления объекта требуется пара ключ / значение. Нулевые ключи и нулевые значения допускаются. например:

{в-> 3, миро-> 5, IS-> 2, nice-> 4}

HashSet является реализацией Set, которая не допускает дублирования . Если вы попытались добавить дублирующийся объект, вызов метода public boolean add(Object o), то набор остается неизменным и возвращает false. например:

[, мир, есть хороший]

0 голосов
/ 05 мая 2010

HashSet использует HashMap для хранения своих записей. Каждая запись во внутренней HashMap определяется одним объектом, поэтому все записи хешируются в одном сегменте. Я не помню, что внутренний HashMap использует для хранения своих значений, но на самом деле это не имеет значения, поскольку этот внутренний контейнер никогда не будет содержать повторяющихся значений.

РЕДАКТИРОВАТЬ : Чтобы ответить на комментарий Мэтью, он прав; У меня было это задом наперед. Внутренняя HashMap имеет ключ с объектами, которые составляют элементы Set . Значения HashMap - это Объект, который просто хранится в корзинах HashMap.

0 голосов
/ 04 мая 2015

HashMap - реализация интерфейса Map HashSet является реализацией Set Interface

HashMap Хранит данные в виде пары ключ-значение ХэшСеть Магазин только объекты

Метод Put используется для добавления элемента в карту. Метод добавления используется для добавления элемента Set

В хэш-карте значение хеш-кода рассчитывается с использованием ключевого объекта Здесь объект-член используется для вычисления значения хеш-кода, которое может быть одинаковым для двух объектов, поэтому метод equal () используется для проверки равенства, если он возвращает false, что означает, что два объекта различны.

HashMap работает быстрее, чем hashset, поскольку для доступа к объекту используется уникальный ключ HashSet работает медленнее, чем Hashmap

0 голосов
/ 04 апреля 2013

HashMaps разрешить один нулевой ключ и нулевые значения. Они не синхронизированы, что повышает эффективность. Если это необходимо, вы можете сделать их синхронизированными, используя Collections.SynchronizedMap()

Hashtables не разрешают нулевые ключи и синхронизируются.

0 голосов
/ 23 октября 2012

HashSet и HashMap хранят обе пары, разница в том, что в HashMap вы можете указать ключ, а в HashSet ключ происходит из хеш-кода объекта

0 голосов
/ 07 августа 2011

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

0 голосов
/ 05 мая 2010

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

...