Разница между множеством, списком и картой в Java -
«Set», «List» и «Map» являются тремя важными интерфейсами инфраструктуры сбора Java, а «Разница между Set, List и Map в Java» является одним из наиболее часто задаваемых вопросов об интервью в Java Collection. Некоторое время этот вопрос задают как Когда использовать List, Set и Map в Java. Очевидно, что интервьюер хочет знать, знакомы ли вы с основами Java Collection Framework или нет. Чтобы решить, когда использовать Список, Набор или Карту, вам необходимо знать, что это за интерфейсы и какие функции они предоставляют. Список в Java предоставляет упорядоченную и проиндексированную коллекцию, которая может содержать дубликаты. Set предоставляет неупорядоченную коллекцию уникальных объектов, то есть Set не допускает дублирование, а Map предоставляет структуру данных, основанную на паре ключ-значение и хешировании. Все три List, Set и Map являются интерфейсами в Java, и существует множество конкретных реализаций их, доступных в Collection API. ArrayList и LinkedList являются двумя наиболее популярными реализациями List, в то время как LinkedHashSet, TreeSet и HashSet часто используются реализацией Set. В этой статье о Java мы увидим разницу между Map, Set и List в Java и узнаем, когда использовать List, Set или Map.
Set vs List vs Map в Java
Как я уже сказал, Set, List и Map являются интерфейсами, которые определяют основной контракт, например Набор контрактов говорит, что он не может содержать дубликатов. Основываясь на наших знаниях List, Set и Map, давайте сравним их по разным показателям.
Двойные объекты
Основное различие между интерфейсами List и Set в Java заключается в том, что List допускает дублирование, а Set не допускает дублирование. Все реализации Set соблюдают этот контракт. Карта содержит два объекта для каждой записи, например ключ и значение, и он может содержать повторяющиеся значения, но ключи всегда уникальны. Смотрите здесь для большей разницы между List и Set структурой данных в Java.
Заказать
Другое ключевое отличие между List и Set состоит в том, что List является упорядоченной коллекцией, контракт List поддерживает порядок вставки или элемент. Набор представляет собой неупорядоченную коллекцию, вы не гарантируете, какой элемент заказа будет храниться. Хотя некоторые из реализации Set, например LinkedHashSet поддерживает порядок. Также SortedSet и SortedMap, например TreeSet и TreeMap поддерживают порядок сортировки, налагаемый с помощью Comparator или Comparable.
Нулевые элементы
Список допускает нулевые элементы, и вы можете иметь много нулевых объектов в списке, потому что он также допускает дублирование. Установите просто разрешить один нулевой элемент, поскольку дубликат не разрешен, в то время как в Map вы можете иметь нулевые значения и самое большее один нулевой ключ. Стоит отметить, что Hashtable не допускает нулевой ключ или значения, но HashMap допускает нулевые значения и один нулевой ключ. Это также является основным отличием этих двух популярных реализаций интерфейса Map, он же HashMap против Hashtable.
Популярная реализация
Самыми популярными реализациями интерфейса List в Java являются ArrayList, LinkedList и Vector. ArrayList является более универсальным и обеспечивает произвольный доступ с индексом, тогда как LinkedList больше подходит для частого добавления и удаления элементов из List. Вектор является синхронизированным аналогом ArrayList. С другой стороны, наиболее популярными реализациями интерфейса Set являются HashSet, LinkedHashSet и TreeSet. Во-первых, это набор общего назначения, который поддерживается HashMap. Для получения дополнительной информации посмотрите, как HashSet работает внутри Java. Он также не предоставляет никаких гарантий заказа, но LinkedHashSet обеспечивает заказ наряду с уникальностью, предоставляемой интерфейсом Set. Третья реализация TreeSet также является реализацией интерфейса SortedSet, следовательно, она хранит элементы в отсортированном порядке, указанном методами compare () или compareTo (). Теперь последняя, самая популярная реализация интерфейса Map - это HashMap, LinkedHashMap, Hashtable и TreeMap. Первый - это несинхронизированная реализация Map общего назначения, в то время как Hashtable является ее синхронизированным аналогом, оба не предоставляют никаких гарантий упорядочения, которые исходят от LinkedHashMap. Как и TreeSet, TreeMap также является отсортированной структурой данных и хранит ключи в отсортированном порядке.