HashMap и HashSet

Anonim

Когда вы изучаете новый компьютерный язык, одна из первых вещей, которую вы обычно задаете, - это работа с большими группами данных. Эта тема часто рассматривается в разделе «Структуры данных». Если вы копаете глубже, вы должны столкнуться с такими темами, как связанные списки, очереди, стеки и бинарные деревья среди многих других структур данных. В Java эти структуры являются частью структуры коллекций Java. Коллекция представляет собой не что иное, как тип структуры данных, которая относится к группировке нескольких элементов данных, а структура коллекций Java Frameworks стандартизирует способ обработки этих групп объектов. Фактически, структура коллекций была разработана для достижения нескольких целей.

Вся структура коллекций разработана вокруг набора стандартных интерфейсов. Несколько стандартных реализаций, таких как LinkedList, HashSet и TreeSet, обеспечивают эти интерфейсы, которые вы можете как есть. Кроме того, вы можете также реализовать свою собственную коллекцию, если захотите. Однако в дополнение к коллекциям фреймворк определяет несколько интерфейсов и классов карт. Java содержит три реализации универсальной карты - HashMap, TreeMap и LinkedHashMap - которые хранят пары ключ / значение. Хотя карты не являются технически коллекциями, они полностью интегрированы с коллекциями. На самом деле карты сосредоточены на группах ассоциаций между объектами. В этой статье кратко изложены основные различия между HashMap и HashSet.

Что такое HashMap?

HashMap - наиболее часто используемая реализация интерфейса карты, которая предоставляет базовую карту ключа / значения, где элементы неупорядочены. Он использует специальное значение, называемое хеш-кодом, вместо медленного поиска ключа. Хэш-код - это способ получить информацию в рассматриваемом объекте и превратить его в «относительно уникальный» int для этого объекта. Он просто работает на принципе хэширования, что означает, что он использует хеш-функцию для сопоставления идентифицирующих значений. Подобно тому, как Vector и Stack имеют свои замены в ArrayList и LinkedList, Hashtable имеет замену в HashMap. Он расширяет AbstractMap для реализации интерфейса Map, используя внутреннее представление Hashtable. Подобно другим реализациям общего назначения, HashMap поддерживает необязательные методы Map, допускает нулевые значения и не синхронизируется.

Что такое HashSet?

HashSet является одним из членов Framework Java Collections Framework, который реализует интерфейс Set, поддерживаемый хэш-таблицей, которая на самом деле является экземпляром HashMap. Как следует из названия, оно реализуется хэш-таблицей, массив, в котором элементы хранятся в позиции, полученной из их содержимого. В отличие от Карты, Set - это точно коллекция с точно таким же интерфейсом, поэтому нет никаких дополнительных функций, таких как два разных списка. HashSet использует функцию хеширования, которая специально разработана для быстрого поиска. Это неупорядоченный набор уникальных объектов, которые не могут хранить повторяющиеся значения. HashSet расширяет класс AbstractSet, который реализует интерфейс Set. Однако HashSet не определяет никаких дополнительных методов, кроме тех, которые предусмотрены его суперклассами и интерфейсами.

Разница между HashMap и HashSet

  1. основной

HashMap - наиболее часто используемая реализация интерфейса карты, которая предоставляет базовую карту ключа / значения, где элементы неупорядочены. Он просто работает на принципе хэширования, что означает, что он использует хеш-функцию для сопоставления идентифицирующих значений. HashSet, с другой стороны, является одним из членов Framework коллекций Java, который реализует интерфейс Set, поддерживаемый хэш-таблицей, которая на самом деле является экземпляром HashMap. Проще говоря, HashMap реализует интерфейс Map, тогда как HashSet реализует интерфейс Set.

  1. функциональность

HashSet создает коллекцию, которая использует хеш-таблицу для хранения. Хэш-таблица хранит информацию с использованием метода, называемого хешированием. HashSet использует функцию хеширования, которая специально предназначена для быстрого поиска, для хранения элементов или значений. Большая часть функциональности HashSet предоставляется через суперкомплекс AbstractCollection и AbstractSet, который HashSet разделяет с TreeSet. HashMap расширяет AbstractMap для реализации интерфейса карты, используя внутреннее представление Hashtable. Оба класса не синхронизированы, что означает, что они не подходят для поточно-безопасных операций.

  1. Дублирующие значения

Поскольку Map не поддерживает повторяющиеся ключи, HashMap не позволяет дублировать ключи, но ему разрешено иметь повторяющиеся значения. Это означает, что дублирующиеся значения могут существовать в HashMap, но вы можете использовать коллекцию как значение для некоторого ключа. Каждый ключ должен быть уникальным в HashMap, и один ключ не может иметь более 1 значения. С другой стороны, HashSet не может дублировать элементы простым определением набора, что означает, что вы не можете хранить повторяющиеся значения в HashSet. HashMap допускает только один нулевой ключ, но допускает любое количество нулевых значений, тогда как HashSet допускает только одно значение null.

  1. Механизм хранения

HashMap работает над принципом хэширования, что означает, что он использует хэш-функцию для сопоставления идентифицирующих значений с помощью алгоритма хэширования, чтобы обеспечить легкий поиск. Истинный механизм хэширования всегда возвращает тот же hashCode (), когда применяется к одному и тому же объекту. С другой стороны, HashSet внутренне использует HashMap в качестве структуры данных резервного копирования для добавления или хранения объектов. Это означает, что когда объект HashSet создан, он создаст объект HashMap.

HashMap против HashSet: сравнительная таблица

Резюме HashMap Vs. HashSet

Хотя HashMap и HashSet не синхронизированы, что означает, что они не подходят для потокобезопасных операций, и они представляют собой совершенно разные конструкции, они обеспечивают постоянную производительность времени для основных операций, таких как добавление, удаление элемента и т. Д. Хотя HashMap является универсальной реализацией интерфейс карты, в котором хранятся пары ключ / значение, HashSet представляет собой реализацию интерфейса Set. HashSet использует HashMap для поддержки его реализации. Однако HashMap использует принцип хэширования и использует его для быстрого поиска ключа.