Помимо того, что HashSet
не допускает дублирования значений, в чем разница между HashMap
и HashSet
?
Я имею в виду реализацию мудрой? Это немного расплывчато, потому что оба используют хеш-таблицы для хранения значений.
java
collections
hashmap
hashset
SpikETidE
источник
источник
Ответы:
Это совершенно разные конструкции. А
HashMap
является реализациейMap
. Карта отображает ключи на значения. Поиск ключа происходит с использованием хэша.С другой стороны, a
HashSet
является реализациейSet
. Набор предназначен для соответствия математической модели набора. AHashSet
использует aHashMap
для поддержки своей реализации, как вы заметили. Тем не менее, он реализует совершенно другой интерфейс.Когда вы ищете то, что будет наилучшим
Collection
для ваших целей, этот учебник является хорошей отправной точкой. Если вы действительно хотите знать, что происходит, для этого тоже есть книга .источник
HashSet - это набор , например, {1,2,3,4,5}
HashMap - это карта ключ -> значение (ключ к значению), например, {a -> 1, b -> 2, c -> 2, d -> 1}
Обратите внимание, что в моем примере выше, в HashMap не должно быть дубликатов ключей, но они могут иметь дублирующиеся значения.
В HashSet не должно быть повторяющихся элементов.
источник
HashSet
HashSet не синхронизируется, что означает, что они не подходят для поточно-ориентированных операций, пока не синхронизированы явно. [Схожесть]
HashMap
HashMap не синхронизируется, что означает, что они не подходят для поточно-ориентированных операций, пока не синхронизированы явно. [Схожесть]
Пожалуйста, обратитесь к этой статье, чтобы найти больше информации.
источник
Обидно, что оба их названия начинаются с Hash . Это наименее важная часть из них. Важные части следуют за Хешем - Сет и Карта , как указывали другие. Соответственно, они представляют собой Set - неупорядоченную коллекцию - и Map - коллекцию с доступом по ключу. Они реализованы с помощью хэшей - отсюда и имена, но их сущность скрыта за этой частью их имен.
Не смущайтесь их именами; это глубоко разные вещи.
источник
В
Hashset
Внутренне орудияHashMap
. Если вы видите внутреннюю реализацию, значения, вставленные в HashSet, хранятся в виде ключей в HashMap, а значение является объектом Dummy класса Object.Разница между HashMap и HashSet:
HashMap
содержит пары ключ-значение, и к каждому значению можно получить доступ по ключу, поскольку HashSet необходимо повторять каждый раз, так как нет метода get.HashMap
реализует интерфейс Map и допускает одно нулевое значение в качестве ключа, а несколько пустых значений - в качестве значений. ГдеHashSet
реализован интерфейс Set, допускается только одно нулевое значение и нет дублирующихся значений. (Запомните, один нулевой ключ допускается в ключе HashMap, следовательно, одно нулевое значение в HashSet поскольку HashSet реализует HashMap внутренне).HashSet
иHashMap
не поддерживает порядок вставки во время итерации.источник
HashSet позволяет нам хранить объекты в наборе, где HashMap позволяет нам хранить объекты на основе ключа и значения. Каждый объект или сохраненный объект будет иметь ключ.
источник
Как видно из названий, HashMap - это ассоциативная карта (отображение ключа на значение), а HashSet - это просто Set .
источник
Различия между HashSet и HashMap в Java
1) Первое и наиболее существенное различие между HashMap и HashSet заключается в том, что HashMap является реализацией интерфейса Map, в то время как HashSet является реализацией интерфейса Set, что означает, что HashMap является структурой данных на основе ключевых значений, а HashSet гарантирует уникальность, не допуская дублирования. В реальности HashSet - это оболочка для HashMap в Java, если вы посмотрите на код метода add (E e) HashSet.java, то увидите следующий код:
где его помещение Объекта в карту в качестве ключа и значения является конечным объектом НАСТОЯЩЕГО, который является фиктивным.
2) Второе отличие HashMap от HashSet состоит в том, что мы используем метод add () для помещения элементов в Set, но мы используем метод put () для вставки ключа и значения в HashMap в Java.
3) HashSet допускает только один нулевой ключ, но HashMap может разрешить один нулевой ключ + несколько нулевых значений.
Вот и все различия между HashSet и HashMap в Java. Итак, HashSet и HashMap - это два разных типа Коллекции, один из которых является Установленным, а другой - Картой.
источник
Различия между HashSet и HashMap в Java
HashSet внутренне использует HashMap для хранения objects.when метод add (String), вызывающий его, вызывает метод put (key, value) HahsMap, где key = String object & value = new Object (Dummy). Таким образом, он не содержит дубликатов, потому что ключи - это не что иное, как Value Объект.
Объекты, которые хранятся как ключи в Hashset / HashMap, должны переопределять хэш-код и равно контракту.
Ключи, которые используются для доступа / сохранения объектов-значений в HashMap, должны быть объявлены как Final, поскольку при его изменении объект Value не может быть найден и возвращает ноль.
источник
А
HashMap
заключается в добавлении, получении, удалении ... объектов, проиндексированных с помощью пользовательского ключа любого типа.А
HashSet
состоит в добавлении элементов, удалении элементов и проверке наличия элементов путем сравнения их хешей.Таким образом, HashMap содержит элементы, а HashSet запоминает их хеши.
источник
equals()
методы.Различия: по отношению к иерархии: HashSet реализует Set. HashMap реализует Map и хранит сопоставление ключей и значений.
Использование HashSet и HashMap по отношению к базе данных поможет вам понять значение каждого из них.
HashSet: обычно используется для хранения уникальных объектов коллекции. Например: он может использоваться в качестве класса реализации для хранения отношения многие-к-одному между
классом Item и предложением класса, где (Item имеет много предложений) HashMap: используется для сопоставления ключа со значением. Значение может быть нулевым или любым объектом. / список объекта (который сам по себе является объектом).
источник
HashSet реализуется в терминах HashMap . Это отображение между ключом и НАСТОЯЩИМ объектом.
источник
HashSet использует HashMap для хранения своих записей. Каждая запись во внутренней HashMap определяется одним объектом, поэтому все записи хешируются в одном сегменте. Я не помню, что внутренний HashMap использует для хранения своих значений, но это на самом деле не имеет значения, так как этот внутренний контейнер никогда не будет содержать повторяющиеся значения.
РЕДАКТИРОВАТЬ : Чтобы ответить на комментарий Мэтью, он прав; У меня было это задом наперед. Внутренний HashMap связан с объектами, которые составляют элементы Set . Значения HashMap - это Объект, который просто хранится в корзинах HashMap.
источник
HashMap
являетсяMap
реализацией, позволяющей дублировать значения, но не дублировать ключи. , Для добавления объекта требуется пара ключ / значение. Нулевые ключи и нулевые значения допускаются. например:HashSet
являетсяSet
реализацией, которая не допускает дублирования. Если вы попытались добавить дублирующийся объект, вызовpublic boolean add(Object o)
метода, то набор остается неизменным и возвращаетсяfalse
. например:источник
вы в значительной степени ответили на свой вопрос - хешсет не допускает повторяющихся значений. было бы тривиально построить хэш-набор, используя вспомогательную хэш-карту (и просто проверить, существует ли значение). я предполагаю, что различные реализации Java или делают это, или реализуют некоторый пользовательский код, чтобы сделать это более эффективно.
источник
java.util.HashSet
говорит, что это поддерживаетсяjava.util.HashMap
.По сути, в HashMap пользователь должен предоставить и Key, и Value, тогда как в HashSet вы предоставляете только Value, ключ автоматически получается из Value с помощью хеш-функции. Таким образом, имея ключ и значение, HashSet может храниться как HashMap внутри.
источник
HashSet и HashMap хранят пары, разница в том, что в HashMap вы можете указать ключ, а в HashSet ключ происходит из хеш-кода объекта
источник
HashMaps
разрешить один нулевой ключ и нулевые значения. Они не синхронизированы, что повышает эффективность. Если это необходимо, вы можете синхронизировать их, используяCollections.SynchronizedMap()
Hashtables
не допускают нулевые ключи и синхронизируются.источник
HashMap - это реализация интерфейса Map. HashSet - это реализация интерфейса Set.
HashMap Хранит данные в виде пары ключ-значение. HashSet Хранит только объекты
Метод Put используется для добавления элемента в карту. Метод Add используется для добавления элемента. Set
В хэш-карте значение хеш-кода вычисляется с использованием ключевого объекта. Здесь объект-член используется для вычисления значения хеш-кода, которое может быть одинаковым для двух объектов, поэтому метод equal () используется для проверки на равенство, если он возвращает false, что означает, что два объекта различны.
HashMap работает быстрее, чем hashset, поскольку для доступа к объекту используется уникальный ключ. HashSet работает медленнее, чем Hashmap.
источник