Когда вы изучаете новый компьютерный язык, в первую очередь вы спрашиваете, как работать с большими группами данных. Эта тема часто освещается в теме «Структуры данных». Если вы копаете глубже, вы должны найти такие темы, как связанные списки, очереди, стеки и двоичные деревья среди многих других структур данных. В Java эти структуры являются частью Java Collections Framework. Коллекция - это не что иное, как тип структуры данных, которая относится к группировке нескольких элементов данных, а Java Collections Framework стандартизирует способ обработки этих групп объектов. Фактически, структура коллекций была разработана для достижения нескольких целей..
Вся структура коллекций разработана на основе набора стандартных интерфейсов. Несколько стандартных реализаций, таких как LinkedList, HashSet и TreeSet, обеспечиваются этими интерфейсами, которые вы можете использовать как есть. Кроме того, вы также можете реализовать свою собственную коллекцию, если хотите. Однако в дополнение к коллекциям платформа определяет несколько интерфейсов и классов карты. Java содержит три реализации карт общего назначения - HashMap, TreeMap и LinkedHashMap - которые хранят пары ключ / значение. Хотя карты технически не являются коллекциями, они полностью интегрированы с коллекциями. На самом деле, карты фокусируются на группах ассоциаций между объектами. Эта статья суммирует ключевые различия между HashMap и HashSet.
HashMap - наиболее часто используемая реализация интерфейса Map, которая предоставляет базовую карту ключ / значение, где элементы неупорядочены. Он использует специальное значение, называемое хеш-кодом, вместо медленного поиска ключа. Хеш-код - это способ взять информацию в рассматриваемом объекте и превратить ее в «относительно уникальный» int для этого объекта. Он просто работает по принципу хэширования, что означает, что он использует хеш-функцию для отображения идентифицирующих значений. Так же, как Vector и Stack имеют свои замены в ArrayList и LinkedList, Hashtable имеет замену в HashMap. Он расширяет AbstractMap для реализации интерфейса Map, используя внутреннее представление Hashtable. И подобно другим реализациям общего назначения, HashMap поддерживает необязательные методы Map, допускает нулевые значения и не синхронизируется.
HashSet является одним из членов Java Collections Framework, который реализует интерфейс Set, поддерживаемый хеш-таблицей, которая на самом деле является экземпляром HashMap. Как следует из названия, оно реализуется хеш-таблицей, массивом, в котором элементы хранятся в позиции, полученной из их содержимого. В отличие от Map, Set - это в точности Коллекция с точно таким же интерфейсом, поэтому никаких дополнительных функциональных возможностей нет, как в случае двух разных списков. HashSet использует функцию хеширования, которая разработана специально для быстрого поиска. Это неупорядоченная коллекция уникальных объектов, которые не могут хранить повторяющиеся значения. HashSet расширяет класс AbstractSet, который реализует интерфейс Set. Однако HashSet не определяет никаких дополнительных методов, кроме тех, которые предоставляются его суперклассами и интерфейсами..
HashMap - наиболее часто используемая реализация интерфейса Map, которая предоставляет базовую карту ключ / значение, где элементы неупорядочены. Он просто работает по принципу хэширования, что означает, что он использует хеш-функцию для отображения идентифицирующих значений. HashSet, с другой стороны, является одним из членов Java Collections Framework, который реализует интерфейс Set, поддерживаемый хеш-таблицей, которая фактически является экземпляром HashMap. Проще говоря, HashMap реализует интерфейс Map, тогда как HashSet реализует интерфейс Set.
HashSet создает коллекцию, которая использует хеш-таблицу для хранения. Хэш-таблица хранит информацию с помощью метода, называемого хэшированием. HashSet использует функцию хеширования, которая специально разработана для быстрого поиска, для хранения элементов или значений. Большая часть функциональности HashSet обеспечивается через суперкласс AbstractCollection и AbstractSet, который HashSet разделяет с TreeSet. HashMap расширяет AbstractMap для реализации интерфейса Map с использованием внутреннего представления Hashtable. Оба класса не синхронизированы, то есть они не подходят для поточно-ориентированных операций..
Поскольку Map не поддерживает дубликаты ключей, HashMap не допускает дублирование ключей, но разрешено иметь дублирующиеся значения. Это означает, что в HashMap могут существовать повторяющиеся значения, но вы можете использовать коллекцию как значение для некоторого ключа. Каждый ключ должен быть уникальным в HashMap, и нельзя допустить, чтобы один ключ имел более 1 значения. HashSet, с другой стороны, не может иметь дублирующихся элементов простым определением набора, что означает, что вы не можете хранить повторяющиеся значения в HashSet. HashMap допускает только один нулевой ключ, но допускает любое количество нулевых значений, тогда как HashSet допускает только одно нулевое значение.
HashMap работает по принципу хэширования, что означает, что он использует хеш-функцию для сопоставления идентифицирующих значений внутри, используя алгоритм хеширования для облегчения поиска. Настоящий механизм хеширования всегда возвращает один и тот же hashCode () при применении к одному и тому же объекту. HashSet, с другой стороны, внутренне использует HashMap в качестве вспомогательной структуры данных для добавления или хранения объектов. Это означает, что когда создается объект HashSet, он создает объект HashMap..
Хотя и HashMap, и HashSet не синхронизированы, то есть они не подходят для поточно-ориентированных операций и представляют собой совершенно разные конструкции, они обеспечивают постоянную производительность по времени для базовых операций, таких как добавление, удаление элемента и т. Д. Хотя HashMap является реализацией общего назначения. интерфейс Map, в котором хранятся пары ключ / значение, HashSet является реализацией интерфейса Set. HashSet использует HashMap для поддержки своей реализации. HashMap, однако, использует принцип хеширования и использует его для быстрого поиска ключа.