Некоторые важные вопросы собеседования по сбору java,

Что такое EnumSet?

EnumSet в Java - это специализированная реализация набора для использования с перечисляемыми типами. Все элементы, хранящиеся в наборе перечислений, должны явно или неявно происходить из одного типа перечисления, который указывается при создании набора. EnumSet был введен в Java 5 вместе с Enum.
Одно из замечаний по поводу EnumSet заключается в том, что это абстрактный класс, использующий фабричные методы для создания объектов. Есть две конкретные реализации EnumSet -

RegularEnumSet

JumboEnumSet

HashSet против LinkedHashSet против TreeSet в Java

HashSet не упорядочен, он будет хранить элементы на основе вычисленного хеш-значения.
LinkedHashSet поддерживает порядок вставки элементов.
TreeSet сохраняет элементы в отсортированном порядке. Порядок сортировки TreeSet по умолчанию известен как естественный порядок элементов.

HashSet, а также LinkedHashSet позволяют сохранять нулевое значение. Имейте в виду, что как в HashSet, так и в LinkedHashSet допускается только одно нулевое значение.
TreeSet не допускает нулевого значения, попытка добавить null к TreeSet приведет к исключению нулевого указателя.

Для HashSet и LinkedHashSet сравнение элементов выполняется с помощью метода equals (). Обратите внимание, что set допускает только уникальные элементы, и эта уникальность поддерживается с помощью метода equals () для сравнения элементов.
TreeSet выполняет сравнение элемента с помощью метода compareTo (или compare), в зависимости от того, выполняется ли сортировка с помощью Comparable или Comparator.

С точки зрения производительности HashSet находится на вершине, поскольку у него нет дополнительного багажа, связанного с упорядочением вставки или сортировкой. Если хеширование выполнено правильно, HashSet предлагает постоянную временную производительность O (1) для основных операций (добавление, удаление, содержание и размер).

Производительность LinkedHashSet, вероятно, будет немного ниже, чем у HashSet, из-за дополнительных расходов на поддержание связанного списка.
TreeSet должен сортировать элементы при каждой вставке, поэтому производительность будет медленной, но TreeSet обеспечивает гарантированную log (n) временную стоимость для основных операций (добавление, удаление и содержит) независимо от количества хранимых элементов.

Как HashSet внутренне работает в Java?

HashSet внутренне использует HashMap для хранения своих элементов. Но он отличается от HashMap по двум пунктам.

HashSet хранит только уникальные значения, т.е. дублирование недопустимо.

В HashSet у нас есть метод add (E e), который принимает в качестве параметра только добавляемый элемент, а не пару (ключ, значение).

Обратитесь к разделу «Как HashSet работает внутри Java», чтобы узнать больше о внутренней реализации HashSet.

Примечание: приведенные выше и ниже вопросы были подготовлены во время изучения лучшего тренера java class training in Chennai.

Какую реализацию Set следует использовать, если вы хотите сохранить порядок размещения?

В этом случае следует использовать LinkedHashSet.

Обратитесь к LinkedHashSet в Java, чтобы узнать больше о LinkedHashSet в Java.

Что такое LinkedHashSet?

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

Какую реализацию карты следует использовать, если вы хотите сохранить порядок вставки?

В этом случае следует использовать LinkedHashMap.

Обратитесь к LinkedHashMap в Java, чтобы узнать больше о LinkedHashMap в Java.

Что такое LinkedHashMap?

LinkedHashMap также является одной из реализаций интерфейса Map, помимо реализации интерфейса Map LinkedHashMap также расширяет класс HashMap. Так же, как HashMap, LinkedHashMap также допускает один нулевой ключ и несколько нулевых значений.
Чем он отличается от других реализаций интерфейса Map, таких как HashMap и TreeMap, заключается в том, что LinkedHashMap поддерживает порядок вставки элементов, что означает, если мы повторяем LinkedHashMap мы получим ключи в том порядке, в котором они были вставлены на карту.
LinkedHashMap поддерживает двусвязный список, охватывающий все его записи, и именно так он поддерживает порядок итераций.

Какую реализацию карты следует использовать, если вы хотите, чтобы значения карты сортировались по ключам?

В этом случае следует использовать TreeMap.

Что такое TreeMap в Java?

TreeMap также является одной из реализаций интерфейса карты, такого как HashMap и LinkedHashMap. Класс TreeMap реализует интерфейс NavigableMap и расширяет класс AbstractMap.

От других реализаций интерфейса Map он отличается тем, что объекты в TreeMap хранятся в отсортированном порядке. Элементы упорядочиваются с использованием их естественного порядка, или во время создания карты может быть предоставлен компаратор, чтобы обеспечить настраиваемый порядок.

Одним из важных моментов в отношении TreeMap является то, что хотя HashMap и LinkedHashMap допускают один ноль в качестве ключа, TreeMap не допускает ноль в качестве ключа. Любая попытка добавить null в TreeMap приведет к исключению NullPointerException.

Что такое WeakHashMap?

WeakHashMap - это реализация интерфейса карты на основе хеш-таблицы со слабыми ключами. Запись в WeakHashMap будет автоматически удалена, когда ее ключ больше не используется в обычном режиме. Это означает, что хранение только слабых ссылок позволяет сборщику мусора удалять запись (пару ключ-значение) с карты, если на ее ключ нет ссылки за пределами WeakHashMap.
В WeakHashMap поддерживаются как нулевые значения, так и нулевой ключ. WeakHashMap создается как - Map weakHashMap = new WeakHashMap ();

Что такое IdentityHashMap?

Класс IdentityHashMap реализует интерфейс Map с хэш-таблицей, используя равенство ссылок вместо равенства объектов при сравнении ключей (и значений). Другими словами, в IdentityHashMap два ключа k1 и k2 считаются равными тогда и только тогда, когда (k1 == k2). Где, как в обычных реализациях карты (например, HashMap), два ключа k1 и k2 считаются равными тогда и только тогда, когда (k1 == null? K2 == null: k1.equals (k2)).
Обратите внимание, что этот класс является не универсальная реализация карты. Хотя этот класс реализует интерфейс Map, он намеренно нарушает общий договор Map, который требует использования метода equals при сравнении объектов. Этот класс предназначен для использования только в тех редких случаях, когда требуется семантика равенства ссылок.

Разница между HashMap и HashTable в Java.

Хотя и HashTable, и HashMap хранят элементы как пару (ключ, значение) и используют технику хеширования для хранения элементов, более того из Java v1.2 класс HashTable был модифицирован для реализации интерфейса Map, что сделало его членом Java Collections Framework. Но есть определенная разница между двумя: -HashMap не синхронизируется, где синхронизируется HashTable.

HashMap допускает одно значение NULL в качестве ключа и любое количество значений NULL, тогда как HashTable не допускает значения NULL в качестве ключа или значения.

Для обхода HashMap можно использовать итератор. Для обхода HashTable можно использовать итератор или перечислитель. Итератор, используемый как для HashMap, так и для HashTable, работает без сбоев, но перечислитель, используемый с HashTable, является отказоустойчивым.

С точки зрения производительности HashMap быстрее, чем HashTable, потому что HashMap не синхронизируется.

Сравнение HashMap, LinkedHashMap и TreeMap в Java.

HashMap не дает никаких гарантий относительно порядка на карте.
LinkedHashMap поддерживает порядок вставки элементов, что означает, что если мы выполним итерацию LinkedHashMap, мы получим ключи в том порядке, в котором они были вставлены в карту. < br /> TreeMap хранит объекты в отсортированном порядке.

HashMap, как и LinkedHashMap, допускает использование одного значения NULL в качестве ключа, хотя несколько значений могут иметь значение NULL.
TreeMap не допускает использования NULL в качестве ключа.

HashMap хранит элементы в сегменте, который на самом деле является индексом массива.
LinkedHashMap также использует ту же внутреннюю реализацию, он также поддерживает двусвязный список, проходящий через все его записи.
TreeMap - красный -Реализация NavigableMap на основе черного дерева.

С точки зрения производительности HashMap обеспечивает постоянную производительность времени O (1) для методов get () и put ().
LinkedHashMap также обеспечивает постоянную производительность времени O (1) для методов get () и put (), но в целом немного медленнее чем HashMap, так как он должен поддерживать двусвязный список.
TreeMap обеспечивает гарантированную временную стоимость log (n) для операций containsKey, get, put и remove.