Кроме того, что HashSet
не допускает повторяющихся значений, в чем разница между HashMap
и HashSet
?
Я имею в виду реализацию мудрый? Это немного неопределенно, потому что оба используют хэш-таблицы для хранения значений.
Кроме того, что HashSet
не допускает повторяющихся значений, в чем разница между HashMap
и HashSet
?
Я имею в виду реализацию мудрый? Это немного неопределенно, потому что оба используют хэш-таблицы для хранения значений.
Это совершенно разные конструкции. A HashMap
представляет собой реализацию Map
. A Map сопоставляет ключи со значениями. Ключевой поиск происходит с использованием хэша.
С другой стороны, a HashSet
является реализацией Set
. A Set предназначен для соответствия математической модели набора. A HashSet
использует HashMap
для поддержки своей реализации, как вы отметили. Однако он реализует совершенно другой интерфейс.
Когда вы ищете то, что будет лучшим Collection
для ваших целей, это Tutorial является хорошим стартовым местом. Если вы действительно хотите знать, что происходит, там есть книга для этого.
HashSet - это набор, например. {1,2,3,4,5}
HashMap - это карта ключ → значение (ключ к значению), например. {a → 1, b → 2, c → 2, d → 1}
Обратите внимание, что в моем примере выше в HashMap не должно быть дубликатов ключей, но оно может иметь повторяющиеся значения.
В HashSet не должно быть повторяющихся элементов.
Поистине стыдно, что оба имени начинаются с Hash. Это наименее важная их часть. Важные части появляются после Hash - Установить и Карта, как указывали другие. То, что они, соответственно, являются Set - неупорядоченной коллекцией - и Карта - коллекция с ключом доступа. Они, случается, реализуются с хешами - то, откуда происходят имена, но их суть скрыта за этой частью их имен.
Не путайте их имена; они очень разные вещи.
HashSet не синхронизируется, что означает, что они не подходят для потокобезопасных операций, пока они не будут явно синхронизированы. [сходство]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap не синхронизируется, что означает, что они не подходят для потокобезопасных операций, пока они не будут синхронизированы явно. [сходство]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
Для получения дополнительной информации см. эту статью.
HashSet позволяет нам хранить объекты в наборе, где, поскольку HashMap позволяет нам хранить объекты на основе ключа и значения. Каждый объект или сохраненный объект будет иметь ключ.
Как следует из названий, HashMap является ассоциативной Карта (сопоставление от ключа к значению), HashSet - это просто Set.
A HashMap
- это добавить, получить, удалить,... объекты, индексированные с помощью настраиваемого ключа любого типа.
A HashSet
состоит в том, чтобы добавлять элементы, удалять элементы и проверять, присутствуют ли элементы, сравнивая их хэши.
Итак, HashMap содержит элементы, и HashSet запоминает их хэши.
Отличия: в отношении иерархии: HashSet реализует Set. HashMap реализует Map и сохраняет сопоставление ключей и значений.
Использование HashSet и HashMap в отношении базы данных поможет вам понять значение каждого из них.
HashSet: обычно используется для хранения уникальных объектов коллекции.
Например: его можно использовать в качестве класса реализации для хранения отношения "много-к-одному" между
класс Предмет и класс Bid, где (элемент имеет много ставок)
HashMap: используется для сопоставления ключа с value.the может быть null или любой объект/список объекта (который сам по себе является объектом).
Различия между HashSet и HashMap в Java
HashSet внутренне использует HashMap для хранения объектов. Когда добавляется метод (String), он вызывает метод HahsMap put (ключ, значение), где key = String object и value = new Object (Dummy). Так как он не поддерживает дубликатов, поскольку ключи ничего, кроме объекта Value.
Объекты, которые хранятся как ключ в Hashset/HashMap, должны переопределять hashcode и равно контракту.
Ключи, которые используются для доступа/хранения объектов значения в HashMap, должны быть объявлены как final, потому что когда они изменены, объект Value не может быть найден и возвращает null.
1) Первое и самое значительное различие между HashMap и HashSet заключается в том, что HashMap представляет собой реализацию интерфейса Map, а HashSet - это реализация интерфейса Set, что означает, что HashMap - это структура данных на основе ключевых значений, и HashSet гарантирует уникальность, не позволяя duplicates. В действительности HashSet является оберткой вокруг HashMap в Java, если вы посмотрите на код add (E e) метода HashSet.java, вы увидите следующий код:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
где его поместить объект в карту как ключ и значение - это конечный объект PRESENT, который является фиктивным.
2) Вторая разница между HashMap и HashSet заключается в том, что мы используем метод add() для размещения элементов в Set, но мы используем метод put() для вставки ключа и значения в HashMap в Java.
3) HashSet допускает только один нулевой ключ, но HashMap может допускать один нулевой ключ + несколько нулевых значений.
Это все по разнице между HashSet и HashMap в Java. Таким образом, HashSet и HashMap представляют собой два разных типа коллекции: Set, а другой - Map.
A HashSet реализуется в терминах HashMap. Это сопоставление между ключом и объектом PRESENT.
вы в значительной степени ответили на свой вопрос - hashset не позволяет дублировать значения. было бы тривиально построить хэшсет, используя хеш-карту поддержки (и просто проверку, чтобы узнать, существует ли это значение). Я предполагаю, что различные реализации java либо делают это, либо реализуют некоторый собственный код, чтобы сделать это более эффективно.
HashSet внутренне использует HashMap для хранения своих записей. Каждая запись во внутреннем HashMap управляется одним объектом, поэтому все записи хеша в одном и том же ведре. Я не помню, что внутренний HashMap использует для хранения своих значений, но это не имеет особого значения, поскольку этот внутренний контейнер никогда не будет содержать повторяющиеся значения.
РЕДАКТИРОВАТЬ. Чтобы ответить на комментарий Мэтью, он прав; Я сделал это назад. Внутренний HashMap имеет ключ с объектами, которые составляют элементы Set. Значения HashMap - это объект, который просто хранится в ведрах HashMap.
Различия между HashSet и HashMap в Java
1). Первая и самая значительная разница между HashMap и HashSet заключается в том, что HashMap представляет собой реализацию интерфейса Map, а HashSet - это реализация интерфейса Set, что означает, что HashMap - это структура данных на основе ключевых значений и HashSet гарантирует уникальность, не допуская дублирования. В действительности HashSet является оберткой вокруг HashMap на Java, если вы посмотрите на метод добавления (E e) метода HashSet.java, вы увидите следующий код:
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
где его поместить объект в карту как ключ и значение - это конечный объект PRESENT, который является фиктивным.
2) Вторая разница между HashMap и HashSet заключается в том, что мы используем метод add() для размещения элементов в Set, но мы используем метод put() для вставки ключа и значения в HashMap в Java.
3) HashSet допускает только один нулевой ключ, но HashMap может допускать один нулевой ключ + несколько нулевых значений.
Это все по разнице между HashSet и HashMap в Java. В итоге HashSet и HashMap представляют собой два разных типа Collection, которые являются Set, а другой - Map.
HashSet
HashSet - это реализация Set Interface, который не позволяет дублировать значение, все методы, которые находятся в Collection Framework, также находятся в Set Interface по умолчанию, но когда мы говорим о настройке Hash, главное - это объекты, которые будут храниться в HashSet должен переопределить метод equals() и hashCode(), чтобы мы могли проверить равенство, и в нашем наборе не сохранялось дублирующее значение. Если мы создали наши собственные объекты, нам нужно реализовать hashCode() и equal() таким образом которые смогут правильно сравнивать объекты при сохранении в наборе, чтобы дублирующие объекты не сохранялись, если мы не переопределили этот метод, объекты будут использовать реализацию этого метода по умолчанию.
Метод: public boolean add (Object o) Метод используется для добавления элемента в набор, который возвращает false, если его дублирующее значение в случае HashSet в противном случае возвращает true, если добавлено успешно.
HashMap
HashMap - это реализация интерфейса карты, который отображает ключ к значению. Дублировать ключи не допускаются на карте. В основном карта. Интерфейс имеет два класса реализации. HashMap и TreeMap. Основное различие заключается в том, что TreeMap поддерживает порядок объектов, но HashMap будет not.HashMap допускает нулевые значения и нулевые ключи. HashMap не синхронизирован, но среда сбора данных предоставляет методы, чтобы мы могли синхронизировать их, если несколько потоков собираются получить доступ к нашему хэшмапу, а один поток структурно изменит нашу карту.
Метод public object put (Object Key, Object value) используется для добавления элемента в карту.
HashMap
- это реализация Map
, позволяющая дублировать значения, но не дублировать ключи.. Для добавления объекта требуется пара ключей/значений. Разрешены значения Null Keys и Null. например:
{в- > 3, миро- > 5, IS- > 2, nice- > 4}
HashSet
- это реализация Set
, которая не позволяет дублировать. Если вы попытались добавить дублированный объект, вызов метода public boolean add(Object o)
, тогда набор остается неизменным и возвращает false
. например:
[, мир, есть хороший]
В основном в HashMap пользователь должен предоставить как ключ, так и значение, тогда как в HashSet вы предоставляете только значение, ключ выводится автоматически из значения с помощью хэш-функции. Поэтому, имея ключ и значение, HashSet может быть сохранен как HashMap внутренне.
HashSet и HashMap обе пары магазинов, разница заключается в том, что в HashMap вы можете указать ключ, а в HashSet ключ поступает из хеш-кода объекта
HashMaps
разрешить один нулевой ключ и нулевые значения. Они не синхронизированы, что повышает эффективность. Если это необходимо, вы можете синхронизировать их с помощью Collections.SynchronizedMap()
Hashtables
не разрешать нулевые ключи и синхронизировать.
HashMap - это реализация интерфейса Map HashSet - это реализация Set Interface
HashMap Сохраняет данные в форме пары значений ключа HashSet Сохранить только объекты
Метод put используется для добавления элемента в карту Добавить метод используется для добавления элемента Set
В хэш-карте значение hashcode вычисляется с использованием ключевого объекта Здесь объект-член используется для вычисления значения hashcode, которое может быть одинаковым для двух объектов, поэтому метод equal() используется для проверки равенства, если он возвращает false, что означает, что два объекта различаются.
HashMap быстрее, чем hashset, потому что для доступа к объекту используется уникальный ключ HashSet медленнее, чем Hashmap
Hashset Internally реализует HashMap. Если вы видите внутреннюю реализацию на http://javaconceptoftheday.com/how-hashset-works-internally-in-java/ значения, вставленные в HashSet, хранятся как ключи в HashMap, а значение - объект Dummy класса Object. Разница между HashMap и HashSet: - 1. HashMap содержит пары ключевых значений, и к каждому значению может обращаться ключ, где, когда HashSet необходимо повторять каждый раз, когда нет метода get. 2. HashSet реализует интерфейс карты и позволяет одному нулевому значению в качестве значения ключа и нескольких нулевых значений в качестве значений. Если HashSet реализует интерфейс Set, допускает только одно нулевое значение и не дублирует значения. (Повторите один нулевой ключ в ключе HashMap, следовательно, один null в HashSet, поскольку HashSet реализует HashMap внутренне). 3.HashSet и HashMap не поддерживают порядок вставки во время итерации.