Hashmap Interview Вопросы и ответы [Для начинающих и опытных]
Опубликовано: 2020-09-24Класс java.util.HashMap на сегодняшний день является одной из самых важных библиотек Java. Редко какой проект написан на java и не использует в своей реализации библиотеку HashMap. Именно способ реализации этой структуры данных делает ее почти незаменимой для любой программы, связанной с Java. HashMap по своему определению очень прост. HashMap — это структура данных, реализованная с использованием очень табличного подхода.
Правильно говорят, что если бы была только одна структура данных, то это был бы HashMap. Это не только очень полезно, но и очень эффективно по времени. Простой поиск в HashMap занимает всего около O(1) времени (это означает, что весь поиск в HashMap выполняется за постоянное время). Вы найдете множество реализаций HashMap на языке программирования Java, таких как HashTable, concurrenthashmaps и т. д. Однако, если вы ищете общую реализацию, вам не следует далеко отходить от базового HashMap.
Каждая из этих реализаций HashMap имеет свои собственные наборы функций и вариантов использования. Если вы хотите, чтобы порядок, в котором вы записали сопоставление, был сохранен, вам следует использовать Linked HashMap. Если вы хотите, чтобы ваше сопоставление было отсортировано, вам следует использовать реализацию HashMap TreeMap, которая выполняет сортировку за вас.
Аналогичным образом, если вы ищете хеш-таблицу, которая является потокобезопасной, которую также можно использовать в параллельном приложении, сохраняя при этом масштабируемость, вам следует искать параллельную хэш-карту.
Как видите, есть разные способы использования HashMap. Чтобы действительно понять важность HashMap, вы должны увидеть вопросы интервью для любого профиля работы по разработке программного обеспечения. Вы не сможете правильно оптимизировать время, если не знаете, как правильно реализовать HashMap. Итак, если вы программист, вы не можете не изучить все тонкости HashMap. Итак, ниже мы перечислили некоторые важные вопросы для собеседования по хэш-карте, которые должны помочь вам подготовиться к следующему собеседованию.
Изучите онлайн -курс по науке о данных в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.
Оглавление
Hashmap Интервью Вопросы и ответы
Q1. Как вы будете использовать метод put() HashMap в Java?
Ответ Метод put() просто работает, используя принцип, известный как хеширование. Вы можете использовать эту функцию для сохранения рассматриваемого объекта в бэкенде (который представляет собой массив памяти). Вам придется использовать другую функцию вместе с этой функцией put(), чтобы иметь возможность установить точное положение этого объекта в бэкэнде. Функция hashcode() используется в качестве вспомогательной функции для функции put() способом, описанным ранее.
Итак, как эти две функции работают вместе, так это то, что они идут и ищут доступный ключ и место в памяти в бэкэнде. Если они сталкиваются, то объект, который имеет оба значения (имеется в виду значения как ключа, так и значения), затем добавляется в динамическую реализацию списка, также известную как связанный список. Список понравившихся здесь хранится в той ячейке памяти, которая была найдена ранее.
Q2. Каковы основные потребности, которые должен иметь объект, чтобы его можно было использовать в качестве ключа или значения HashMap?
Ответ И ключ, и значение, которые мы используем в любом HashMap и его реализации, также должны содержать эти две функции. Эти две функции называются equals() и hashcode(). Функция с именем hashcode() используется, когда мы вставляем значение ключа в любой HashMap. При этом функция equals() вызывается только тогда, когда мы пытаемся вернуть значение, которое уже было сохранено в HashMap.
Q3. Допустим, вы потеряли ключи, которые уже использовали в своей HashMap. Следующий ключ, который вы хотите добавить, уже присутствует в HashMap. Как вы думаете, что произойдет в этом случае?
Ответ Если вы чувствуете, что должна быть ошибка, вы не ошибетесь, если мы говорим не о HashMap. Однако, если вы используете HashMap и случайно вставили ключ, значение которого уже присутствовало в хэш-карте, компилятор java не выдаст никакой ошибки. Вместо этого компилятор просто пойдет и найдет значение, связанное с введенным вами ключом, и только обновит это значение.
Если вы используете функцию put() для добавления значения в хэш-карту, возвращаемое значение этой функции будет старым значением, связанным с этим ключом. Итак, давайте предположим, что для ключа A у вас есть сохраненное значение 1. Если вы теперь поместите значение A, скажем, 50, то значение, которое будет возвращено функцией put(), будет 1 , а окончательное значение, хранящееся в ключе A, будет равно 50.
Q4. На случай, если возникнет необходимость сохранения нулевого значения. Сможете ли вы использовать HashMap в этом случае?
Ответ Да, в этом случае мы могли бы использовать хэш-карту без каких-либо проблем, потому что хэш-карты не уменьшают значение, которое вы можете сохранить. Вы можете хранить столько нулевых значений, сколько душе угодно, в любой хэш-карте.
Q5. Как обрабатывается коллизия с реализацией хэш-карты в Java?
Ответ Библиотека кода java.util.HashMap использует метод цепочки для обработки коллизий. Способ, которым работает эта цепочка, заключается в том, что любая новая запись в хэш-карте, которая содержит пару ключа и значения, будет храниться в связанном списке, и этот список затем будет храниться там, где находятся существующие данные хэш-карты (местоположение корзины) .
В случае, когда все ключи, которые у вас есть в вашей хэш-карте, окажутся с одинаковым хэш-кодом, ваша хэш-карта больше не будет хэш-картой. Он будет преобразован в связанный список. Время поиска увеличится порядка единицы (o(1)), т. е. постоянного времени, до порядка N (O(N)), то есть линейного времени.
Q6. Сможете ли вы сохранить ключ с нулевым значением в реализации хэш-карты Java?
Ответ Да, в java-реализации хэш-карты вы сможете хранить ключи с нулевым значением. Но вы сможете сохранить только один такой ключ, который всегда будет храниться в начале списка сегментов. Хэш-карта не будет вызывать функцию hashcode() здесь, потому что, если эта функция используется для нулевого ключа, она выдаст ошибку исключения нулевого указателя. Вам придется использовать функцию get вместо использования нулевого значения в качестве ключа, если вы хотите, чтобы вам был возвращен первый индекс вашей хэш-карты.

Читайте: Сортировка в структуре данных: категории и типы
Q7. Как вы думаете, какая структура данных предназначена для имитации hashmap?
Ответ Предполагается, что хэш-карта имитирует внешний вид и функциональность структуры данных хеш-таблицы. Структура данных хеш-таблицы — ваш идеальный выбор, если вы хотите хранить значения в виде пары «ключ-значение». Основная причина, по которой эта хеш-таблица предпочтительнее, заключается в времени поиска. Итак, если у вас есть ключ, который вы хотите найти, то всего за одно или постоянное время вы сможете вернуть желаемое значение.
Q8. Поскольку hashmap не является одной из основных структур данных, таких как структура или массивы. Как вы думаете, что происходит под капотом всякий раз, когда вы создаете хэш-карту? Как вы думаете, какая комбинация структур данных дала нам хэш-карты?
Ответ Несмотря на то, что хэш-карта на самом деле представляет собой хэш-таблицу, но внутри она не реализована напрямую. Мы используем две известные структуры данных, чтобы вдохнуть жизнь в хэш-карту. Мы используем связанный список и массивы. Связанный список используется для динамического хранения пары ключей и значений, а массив используется для хранения в них всех этих связанных списков; вместе они образуют хэш-карту.
Начиная с Java 8, если связанный список становится достаточно большим, то вместо связанного списка Java реализует двоичное дерево поиска. Это изменение сделано для экономии времени и повышения общей производительности hashmap.
Читайте также: Вопросы для интервью по науке о данных
Q9. В случае, если мы хотим хранить несколько значений под одним и тем же ключом, как вы думаете, будет ли это возможно в реализации хэш-карты, присутствующей в Java?
Ответ Нет, вы не сможете хранить повторяющиеся ключи в хэш-карте. Если вы попытаетесь сохранить новое значение в ключе, уже присутствующем в хэш-карте, то хэш-карта просто удалит значение, ранее сохраненное в этом ключе, и заменит его новым.
Размер хэш-карты в этом случае не изменится, то есть в хэш-карту не будут добавляться ключи. Эта функция является одной из причин, по которой мы используем функцию keyset() для получения всех ключей хэш-карты, и что эта функция возвращает набор, а не коллекцию (поскольку в наборе все значения должны быть уникальными).
Q10. Сможете ли вы хранить повторяющиеся значения в HashMap?
Ответ Да, вы сможете хранить повторяющиеся значения в хэш-карте. По этой причине вы извлекаете все значения из хэш-карты. Тогда вместо набора мы получаем коллекцию. Он не дает значение в виде списка, потому что порядок не гарантируется.
Q11. Является ли реализация хэш-карты в Java потокобезопасной?
Ответ Нет, ванильный Hashmap совсем не потокобезопасен в Java. В идеале вам следует избегать совместного использования хэш-карты в потоке, который может изменить значение и отредактировать хэш-карту в любой форме. Однако вы можете использовать хэш-карту только для чтения, а затем передать ее в поток. Таким образом, содержащиеся в них значения не изменятся.
Q12. Как вы думаете, что произойдет, если мы будем использовать хэш-карту в приложении, использующем многопоточность?
Ответ Если вам случится передать хэш-карту приложению, которое использует более одного потока, и каждый из этих потоков может изменять, добавлять или удалять значения, хранящиеся в хэш-карте, тогда внутренние данные, на основе которых была построена хэш-карта, будут повреждены. . Ссылки, которые использовались для формирования хэш-карты, пропадут, и тогда хэш-карта потеряет свою структуру и свое назначение. Следовательно, всегда рекомендуется всегда использовать потокобезопасную хэш-карту, если вы собираетесь использовать их в многопоточном приложении.
Q13. Если мы хотим перебрать весь HashMap в Java. Какими различными способами мы могли бы это сделать?
Ответ Есть много способов, которыми вы могли бы перебирать хэш-карту в java; некоторые из них перечислены ниже:
- Вы можете использовать функцию keySet вместе с повторяющейся переменной.
- Вы можете использовать функцию enterySet вместе с повторяющейся переменной.
- Вы можете использовать функцию entrySet и использовать ее с расширенным циклом.
- Вы можете использовать набор ключей и получить метод.
Читайте также: Структуры данных и алгоритм в Python: все, что вам нужно знать
Что дальше?
Если вам интересно узнать о науке о данных, ознакомьтесь с программой IIIT-B & upGrad Executive PG по науке о данных, которая создана для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество с отраслевыми экспертами, 1 -на-1 с отраслевыми наставниками, более 400 часов обучения и помощи в трудоустройстве в ведущих фирмах.
Чем Hashtable отличается от HashMap?
Несинхронизированная структура данных — это HashMap. С другой стороны, хеш-таблица является потокобезопасной и может совместно использоваться многими потоками без необходимости кода синхронизации. Hashtable не позволяет использовать один нулевой ключ или несколько нулевых значений, но HashMap позволяет. HashMap следует использовать вместо Hashtable в непоточных приложениях. Проще говоря, HashMap следует использовать в однопоточных или несинхронизированных приложениях.
Быстрее использовать HashMap или TreeMap?
В TreeMap значения определяются ключом. У него не может быть нулевого ключа, но может быть несколько нулевых значений. Он идентичен HashMap, за исключением того, что вместо восходящего порядка он сохраняет восходящий порядок (отсортированный с использованием естественного порядка его ключа). HashMap использует структуру данных на основе массива для организации своих компонентов в соответствии с хеш-функцией в качестве реализации на основе хеш-таблицы. Для большинства операций, таких как add(), delete() и contains, HashMap прогнозирует производительность O(1)() в постоянном времени. В результате это намного быстрее, чем TreeMap.
Когда лучше использовать HashMap вместо ArrayList?
HashMap имеет смысл только тогда, когда доступны уникальные ключи для данных, которые мы хотим сохранить. При поиске вещей на основе ключа мы должны использовать его, так как быстрое время доступа является обязательным. Когда сохранение одинакового порядка записей в коллекции имеет решающее значение, мы должны избегать HashMap. Они оба отличаются друг от друга и служат разным целям. Если вы хотите хранить объекты в Java, используйте HashMap для сопоставления ключей со значениями и ArrayList в противном случае.