Рубрики
Без рубрики

Топ-50 Java Collections Вопросы и ответы для интервью [2020]

Мы уже поделились наиболее часто задаваемыми вопросами для собеседования на java для опытных кандидатов…. С тегом java, коллекция, интервью, новички.

Мы уже поделились наиболее часто задаваемыми вопросами для собеседования на java для опытных кандидатов. Я также поделился хитрыми вопросами интервью по кодированию в наших предыдущих постах. Сегодня мы узнаем о 50 лучших java-коллекциях вопросов и ответов для интервью. Мы разделим этот пост на три категории:

Начальный уровень (опыт работы от 0 до 1 года (новички)) ,

Средний уровень (разработчики Java с опытом работы 1, 2, 3 года)

Продвинутый уровень (3+ опытных) java collections вопросы и ответы для интервью

Примечание: Пожалуйста, подготовьте все вопросы. Интервьюер может задать любые вопросы.

Начальный уровень (0-1 год): Java Collections Вопросы и ответы для интервью

Q1 Что такое Коллекция? Что такое фреймворк коллекций? Каковы преимущества платформы Java Collections Framework?

Коллекция: Коллекция (также называемая контейнером) – это объект, который группирует несколько элементов в единое целое.

Структура коллекций: Структура коллекций обеспечивает единую архитектуру для управления и представления

Преимущества фреймворка коллекций:

  1. Улучшает качество и скорость работы программы

  2. Увеличивает вероятность повторного использования программного обеспечения

  3. Уменьшает затраты на программирование.

Q2 Что такое корневой интерфейс в иерархии коллекций?

Корневым интерфейсом в иерархии коллекций является интерфейс коллекции. Немногие интервьюеры могут возразить, что

интерфейс коллекции расширяет итеративный интерфейс. Таким образом, iterable должен быть корневым интерфейсом. Но вы должны ответить, что итеративный интерфейс присутствует в пакете java.lang, а не в пакете java.util. В Oracle Collection docs четко указано, что Collection interface является членом Java Collections framework. Для Итерируемый интерфейс Oracle doc , итерируемый интерфейс не упоминается как часть Java Collections framework. Итак, если вопрос включает иерархию коллекций, то вы должны ответить на вопрос как интерфейс коллекции (который находится в пакете java.util).

Q3 В чем разница между Коллекцией и коллекциями?

Коллекция – это интерфейс, в то время как Collections – это класс java, оба они присутствуют в пакете java.util и являются частью java collections framework. (ответ)

Q4 Какие классы коллекций синхронизированы или потокобезопасны?

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

Q5 Назовите интерфейсы основной коллекции?

Интерфейсы или иерархия коллекций Java

Список основных интерфейсов коллекции таков: просто упомяните важные из них

Важно: Коллекция, Набор, Очередь, Список, Карта

Другие интерфейсы также в списке: SortedSet, SortedMap, Deque, ListIterator и т.д.

Q6 В чем разница между списком и набором?

Набор содержит только уникальные элементы, в то время как список может содержать повторяющиеся элементы.

Набор неупорядочен, в то время как список упорядочен. Список поддерживает порядок, в котором добавляются объекты.

Q7 В чем разница между Map и Set?

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

Q8 Какие классы реализуют интерфейс List и Set?

Класс, реализующий интерфейс списка: ArrayList, Vector, LinkedList

Класс, реализующий интерфейс набора: HashSet, TreeSet

Q9 Что такое итератор?

Итератор – это интерфейс. Он находится в пакете java.util. Он находится в пакете java.util.

Он находится в пакете java.util.

Основное различие между итератором и перечислением заключается в том, что итератор имеет метод remove(), а перечисление – нет.

Следовательно, используя итератор, мы можем манипулировать объектами, добавляя и удаляя объекты из коллекций. Перечисление ведет себя как интерфейс, доступный только для чтения, поскольку оно может только перемещаться по объектам и извлекать их.

Q11 Какому шаблону проектирования следует итератор?

Он следует шаблону проектирования итератора. Шаблон проектирования итератора позволяет нам перемещаться по коллекции объектов с помощью общего интерфейса, не сообщая нам о базовой реализации.

Перечисление – это пример шаблона проектирования итератора.

Q12 Какие методы вам нужно переопределить, чтобы использовать любой объект в качестве ключа в HashMap?

Чтобы использовать любой объект в качестве ключа в HashMap, он должен реализовать методы equals() и hashCode().

Q13 В чем разница между очередью и стеком?

Очередь – это структура данных, основанная на свойстве FIFO ( first in first out ). Примером очереди в реальном мире является покупка билетов в кино в мультиплексе или кинотеатрах.

Стек – это структура данных, основанная на свойстве LIFO (last in first out). Примером стека в реальном мире является вставка или извлечение компакт-диска из корпуса компакт-диска.

Q14 Как перевернуть список в коллекциях?

В классе Collections есть встроенный обратный метод. reverse(Список списков) принимает список в качестве параметра.

Collections.reverse(объект списка);

Q15 Как преобразовать массив строк в список?

Класс Arrays пакета java.util содержит метод asList(), который принимает массив в качестве параметра.

Так,

String[]  wordArray =  {"Love Yourself"  , "Alive is Awesome" , "Be in present"};

List wordList =  Arrays.asList(wordArray); 

Средний уровень (1-3 года): Java Collections Вопросы и ответы для собеседования

Q16 В чем разница между ArrayList и Vector?

Это один из часто задаваемых вопросов для интервью с коллекцией, основными отличиями которого являются

Вектор синхронизируется, а ArrayList – нет. Вектор работает медленно, в то время как ArrayList работает быстро. Каждый раз, когда это необходимо, Vector увеличивает емкость в два раза от своего первоначального размера, в то время как ArrayList увеличивает размер своего массива на 50%. найдите подробное объяснение ArrayList vs Vector .

Q17 В чем разница между HashMap и Hashtable?

Это один из самых популярных сборников вопросов для интервью для разработчиков java. Убедитесь, что вы прошли через это один раз, прежде чем явиться на собеседование.

Основными различиями между HashMap и Hashtable являются:

a. HashMap допускает один нулевой ключ и любое количество нулевых значений, в то время как Hashtable не допускает нулевых ключей и нулевых значений.

b. HashMap не синхронизирован или потокобезопасен, в то время как Hashtable синхронизирован или потокобезопасен.

подробное объяснение можно найти здесь Hashtable vs HashMap в Java

Q18 В чем разница между методами peek(), poll() и remove() интерфейса очереди?

Оба метода poll() и remove() используются для удаления головного объекта очереди. Основное отличие заключается в том, что очередь пуста().

Если Очередь пуста, то метод poll() вернет значение null. В то время как в аналогичном случае метод remove() вызовет исключение NoSuchElementException .

метод peek() извлекает, но не удаляет начало очереди. Если очередь пуста, то метод peek() также возвращает значение null.

Q19 В чем разница между Iterator и ListIterator?

Используя итератор, мы можем перемещаться по списку объектов в прямом направлении. Но ListIterator может перемещаться по коллекции в обоих направлениях, как вперед, так и назад.

Q20 В чем разница между Array и ArrayList в Java?

Этот вопрос проверяет, понимает ли учащийся концепцию статического и динамического массива. Некоторые основные различия между Array и ArrayList заключаются в следующем:

a. Array имеет статический размер, в то время как ArrayList имеет динамический размер.

b. Массив может содержать примитивные типы данных, в то время как ArrayList не может содержать примитивные типы данных.

найти подробное объяснение ArrayList vs Array в Java

Q21 В чем разница между HashSet и TreeSet?

Основными различиями между HashSet и TreeSet являются:

a. HashSet поддерживает вставленные элементы в случайном порядке, в то время как TreeSet поддерживает элементы в отсортированном порядке

b. HashSet может хранить нулевой объект, в то время как TreeSet не может хранить нулевой объект.

подробное объяснение можно найти здесь Набор деревьев против хэш-набора в Java

Q22 Написать java-код, показывающий вставку, удаление и извлечение объекта HashMap?

Сделайте это самостоятельно (сделай сам), если обнаружите какие-либо трудности или сомнения, пожалуйста, сообщите об этом в комментариях.

Q23 В чем разница между HashMap и ConcurrentHashMap?

Это также один из самых популярных вопросов для интервью с java collections. Убедитесь, что этот вопрос есть в вашем списке дел, прежде чем явиться на собеседование.

Основными различиями между HashMap и ConcurrentHashMap являются:

a. HashMap не синхронизируется, в то время как ConcurrentHashMap синхронизирован.

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

подробное объяснение можно найти здесь ConcurrentHashMap против HashMap в Java

Q24 Расположите следующее в порядке возрастания (производительность):

Хэш-карта, хэш-таблица, ConcurrentHashMap и коллекции. Синхронизированная карта

Хэш-таблица < Коллекции. Синхронизированная карта < ConcurrentHashMap < Хэш-карта

Q25 Как работает HashMap в Java?

Это один из самых важных вопросов для разработчиков java. HashMap работает по принципу хеширования. Найдите подробную информацию здесь, чтобы понять что такое хеширование и как работает hashmap в java .

Q26 В чем разница между LinkedList и ArrayList в Java?

Основными различиями между LinkedList и ArrayList являются:

a. Связанный список – это двусвязная реализация списка интерфейса List, в то время как ArrayList – это реализация массива с возможностью изменения размера интерфейса List.

b. Связанный список можно обойти в обратном направлении, используя метод descendingIterator(), предоставляемый разработчиками Java API, в то время как нам нужно реализовать наш собственный метод для обхода ArrayList в обратном направлении. подробное объяснение можно найти здесь ArrayList против LinkedList в java .

Q27 Что такое интерфейсы сравнения и сравнения? Перечислите разницу между ними?

Мы уже подробно объяснили, что такое интерфейс comparable и comparator, а также примеры здесь, Сопоставимый против компаратора в Java

Q28 Почему Map interface не расширяет интерфейс Collection в Java Collections Framework?

Однозначный ответ: Интерфейс карты несовместим с интерфейсом коллекции.

Пояснение: Поскольку для Map требуется ключ, а также значение, например, если мы хотим добавить пару ключ-значение, мы будем использовать put(Ключ объекта, значение объекта). Таким образом, для добавления элемента в объект HashMap требуется два параметра. В интерфейсе коллекции add(Object o) имеет только один параметр.

Другие причины заключаются в том, что карта поддерживает набор значений, набор ключей, а также другие соответствующие методы, которые имеют просто разные представления из интерфейса коллекции.

Q29 Когда следует использовать ArrayList и LinkedList в приложении?

ArrayList имеет постоянную временную операцию поиска O(1). Следовательно, ArrayList предпочтительнее, когда существует больше операций get() или search.

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

Q30 Написать код для итерации списка различными способами на java?

Существует два способа перебора списка в java:

a. использование итератора

b. использование цикла for-each

Часть кодирования: Сделай сам (СДЕЛАЙ сам), в случае каких-либо сомнений или трудностей, пожалуйста, укажите в комментариях.

Q31 Приведите практический пример BlockingQueue?

BlockingQueue можно использовать в шаблоне проектирования Производитель-потребитель. Вы можете найти подробное объяснение с помощью кода здесь .

Q32 Какова емкость по умолчанию для наиболее часто используемых коллекций java (таких как ArrayList и HashMap)?

Убедитесь, что вы понимаете разницу между терминами “размер” и “вместимость”.

Размер представляет собой количество элементов, хранящихся в данный момент. Емкость указывает максимальное количество элементов, которые коллекция может содержать в данный момент.

Емкость ArrayList по умолчанию: 10

Емкость хэш-карты по умолчанию: 16

Продвинутый уровень (3+ года): Java Collections Вопросы и ответы на собеседования

Q33 Как HashSet работает внутри java?

Это один из популярных вопросов для интервью. HashSet внутренне использует HashMap для поддержания уникальности элементов. Мы уже подробно обсуждали внутреннюю работу hashset в java .

Q34 Что такое CopyOnWriteArrayList? Чем он отличается от ArrayList в Java?

CopyOnWriteArrayList – это потокобезопасный вариант ArrayList, в котором все изменяемые операции, такие как add, set, реализуются путем создания новой копии базового массива.

Это гарантировало, что не вызовет ConcurrentModificationException.

Он разрешает все элементы, включая null. Он введен в JDK 1.5.

Q35 Как работает HashMap в Java?

Мы повторяем этот вопрос, поскольку он является одним из самых важных HashMap работает по принципу хеширования. Пожалуйста, найдите подробный ответ здесь Внутренняя хэш-карта, работающая на java .

Q36 Как работает метод удаления (ключа) в HashMap?

Это новый вопрос, который становится популярным среди интервьюеров java. Мы поделились здесь подробным объяснением о том, как метод remove работает внутри java .

Q37 Что такое BlockingQueue в Java Collections Framework?

BlockingQueue реализует java.util. Интерфейс очереди. BlockingQueue поддерживает операции, которые ожидают, пока очередь не станет непустой при извлечении элемента, и ожидают, пока в очереди не станет доступно место при сохранении элемента.

Он не принимает нулевые элементы.

Блокирующие очереди в первую очередь предназначены для решения проблем между производителем и потребителем.

Реализации BlockingQueue являются потокобезопасными и также могут использоваться в межпотоковых коммуникациях.

Этот класс параллельной коллекции был добавлен в JDK 1.5

Q38 Как работает TreeMap в Java?

TreeMap внутренне использует красно-черное дерево для сортировки элементов в естественном порядке. Пожалуйста, найдите подробные ответы здесь внутренняя реализация TreeMap в java .

Q39 Все вопросы, связанные с классом HashSet, можно найти здесь Часто задаваемые вопросы для интервью с HashSet

Q40 В чем разница между отказоустойчивым итератором и отказоустойчивым итератором?

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

Основными различиями между отказоустойчивыми и отказоустойчивыми итераторами являются:

a. Fail-fast вызывает ConcurrentModificationException, в то время как Fail-safe этого не делает.

b. Fail-fast не клонирует исходный список объектов коллекции, в то время как Fail-safe создает копию исходного списка объектов коллекции.

Разница подробно объясняется здесь отказоустойчивый и отказоустойчивый итератор в java .

Q41 Как ConcurrentHashMap работает внутри Java?

Подробный ответ уже объяснен здесь внутренняя реализация ConcurrentHashMap

Q42 Как вы используете пользовательский объект в качестве ключа в классах коллекций, таких как HashMap?

Если кто-то использует пользовательский объект в качестве ключа, то необходимо переопределить equals() и Метод hashCode()

и еще нужно выполнить контракт.

Если вы хотите сохранить пользовательский объект в отсортированных коллекциях, таких как SortedMap, тогда необходимо убедиться, что метод equals() совместим с методом compareTo(). Если они несовместимы, то коллекция не будет следовать их контрактам, то есть наборы могут допускать дублирование элементов.

Q43 Что такое хеш-коллизия в хеш-таблице? Как это было обработано в Java?

В хэш-таблице, если два разных ключа имеют одинаковое хэш-значение, это приводит к хэш-коллизии. Корзина типа linkedlist, используемая для хранения разных ключей с одинаковым хэш-значением.

Q44 Объясните важность методов hashCode() и equals() ? Объясните также контракт?

Объект HashMap использует метод hashCode() ключевого объекта и метод equals(), чтобы определить индекс для размещения пары ключ-значение. Если мы хотим получить значение из хэш-карты, то используются оба метода. Каким-то образом, если оба метода реализованы неправильно, это приведет к тому, что два ключа выдадут один и тот же вывод hashCode() и equals(). Проблема возникнет в том, что HashMap будет обрабатывать оба выходных данных одинаково, а не по-разному, и перезаписывать самую последнюю пару ключ-значение предыдущей парой ключ-значение.

Аналогично, все классы коллекций, которые не допускают повторяющихся значений, используют методы hashCode() и equals() для поиска повторяющихся элементов. Поэтому очень важно правильно их реализовать.

Контракт хэш-кода() и equals() метод

a. Если object1.равно(object2) , то object1.hashCode().hashCode() всегда должно быть true.

b. Если object1.hashCode().hashCode() имеет значение true, это не гарантирует object1.equals(object2)

Q45 Что такое EnumSet в Java?

EnumSet – это специализированная реализация набора для использования с перечисляемыми типами. Все элементы в enumset должны исходить из одного типа enum, который указывается явно или неявно при создании набора.

Итератор никогда не выдает ConcurrentModificationException и слабо согласован.

Преимущество перед HashSet:

Все основные операции EnumSet выполняются в постоянное время. Скорее всего, он будет намного быстрее, чем аналоги HashSet.

Это часть фреймворка Java Collections, начиная с JDK 1.5.

Q46 Что такое параллельные классы коллекций?

В jdk1.5 разработчики Java Api представили новый пакет под названием java.util.concurrent, который имеет потокобезопасные классы коллекций, поскольку они позволяют изменять коллекции во время итерации. Итератор является отказоустойчивым, то есть он не будет выдавать ConcurrentModificationException.

Вот некоторые примеры параллельных классов коллекций:

a. CopyOnWriteArrayList

b. ConcurrentHashMap

Q47 Как преобразовать данную коллекцию в SynchronizedCollection?

Код в одну строку: Коллекции.synchronizedCollection(Collection collection Obj) преобразует данную коллекцию в синхронизированную коллекцию.

Q48 Что такое IdentityHashMap?

Идентификационная хэш-карта

IdentityHashMap – это класс, присутствующий в пакете java.util. Он реализует интерфейс карты с хэш-таблицей, используя равенство ссылок вместо равенства объектов при сравнении ключей и значений. Он реализует интерфейс карты с хэш-таблицей, используя равенство ссылок вместо равенства объектов при сравнении ключей и значений.

IdentityHashMap не синхронизирован.

Итераторы, возвращаемые методом iterator(), являются отказоустойчивыми, следовательно, они будут вызывать ConcurrentModificationException.

Q49 Что такое WeakHashMap?

WeakHashMap:

WeakHashMap – это класс, присутствующий в пакете java.util, похожий на IdentityHashMap. Это реализация интерфейса карты на основе хэш-таблиц со слабыми ключами. Запись в WeakHashMap будет автоматически удалена, когда ее ключ больше не используется в обычном режиме. Точнее, наличие сопоставления для данного ключа не помешает отбрасыванию ключа сборщиком мусора.

Он допускает нулевые ключи и нулевые значения.

Как и большинство классов коллекций, этот класс не синхронизирован. Синхронизированная карта WeakHashMap может быть создана с использованием коллекций.Метод synchronizedMap().

Итераторы, возвращаемые методом iterator(), являются отказоустойчивыми, следовательно, они будут вызывать ConcurrentModificationException.

Q50 Как вы сделаете коллекции доступными только для чтения?

Q50 Как вы сделаете коллекции доступными только для чтения?

Q50 Как вы сделаете коллекции доступными только для чтения?

Collections.unmodifiableMap(Map m)

Collections.unmodifiableList(List l)

Collections.unmodifiableSet(Set s)

Q51 Что такое исключение UnsupportedOperationException?

Это исключение выдается, чтобы указать, что запрошенная операция не поддерживается.

Пример исключения UnsupportedOperationException:

Другими словами, если вы вызываете метод add() или remove() для коллекции, доступной только для чтения. Мы знаем, что ReadOnlyCollection не может быть изменен. Следовательно, будет выдано исключение UnsupportedOperationException.

Q52 Предположим, что существует класс Employee. Мы добавляем объекты класса Employee в ArrayList. Упомяните шаги, которые необходимо предпринять, если я хочу отсортировать объекты в ArrayList, используя атрибут EmployeeID, присутствующий в классе Employee.

a. Реализуйте сопоставимый интерфейс для класса Employee и теперь для сравнения

б. Теперь мы вызовем метод сортировки класса Collections и передадим список в качестве аргумента, то есть,

 Collections.sort(empList)  

Если вы хотите добавить больше вопросов и ответов для интервью с Java Collections или в случае, если у вас есть какие-либо сомнения, связанные с Java Collections framework, пожалуйста, укажите это в комментариях.

Q53 Какие общие алгоритмы используются в платформе Collections Framework?

Общие алгоритмы, используемые для поиска и сортировки. Например, красно-черный алгоритм используется при сортировке элементов в TreeMap. Большинство алгоритмов используются для интерфейса списка, но лишь немногие из них применимы для всех видов коллекций.

Q54 Как отсортировать ArrayList в порядке убывания?

Один лайнер будет

Collections.sort(arraylist, Collections.reverseOrder());  

Пожалуйста, найдите код здесь: Как отсортировать ArrayList в порядке убывания .

Оригинал: “https://dev.to/javahungry/top-50-collections-interview-questions-and-answers-2020-mpj”