Сообщения

HashMap в Java

Изображение
Эта реализация коллекции обеспечивает постоянную производительность для основных операций (получение (get) и размещение (put)), предполагая, что хэш-функция правильно распределяет элементы по сегментам. Итерация по представлениям коллекций требует времени, пропорционального "емкости" экземпляра HashMap (количеству сегментов) плюс его размеру (количеству сопоставлений "ключ-значение"). Таким образом, очень важно не устанавливать слишком высокую начальную емкость (или слишком низкий коэффициент загрузки), если важна производительность итераций. Экземпляр HashMap имеет два параметра, которые влияют на ее производительность: начальная емкость и коэффициент загрузки. Емкость - это количество сегментов в хэш-таблице, а начальная емкость - это просто емкость на момент создания хэш-таблицы. Коэффициент загрузки - это мера того, насколько может быть заполнена хеш-таблица до того, как ее емкость автоматически увеличится. Когда количество записей в хэш-таблице превышает произ...

Решение проблемы производителя-потребителя с помощью BlockingQueue в Java

Изображение
BlockingQueue : когда поток пытается исключить из пустой очереди, блокируется до тех пор, пока какой-либо другой поток не вставит элемент в очередь. Кроме того, когда поток пытается поставить элемент в полную очередь, он блокируется до тех пор, пока какой-либо другой поток не освободит место в очереди, либо исключив один или несколько элементов из очереди, либо полностью очистив очередь. Проблема производителя и потребителя Производитель и Потребитель (Producer & Consumer) - это два отдельных потока, которые используют одну и ту же ограниченную очередь. Роль производителя производить элементы и помещать их в очередь. Производитель останавливает производство, если очередь заполнена, и возобновляет производство, когда размер очереди не заполнен. Потребитель потребляет элемент из очереди. Потребители прекращают потребление, если размер очереди равен 0 (пусто), и возобновляют потребление, когда в очереди есть элемент. Подойти к решению проблемы можно разными способами. Использован...

Разница между fail-fast и fail-safe итератором в Java

Изображение
fail-fast Iterator Итераторы в Java используются для итерации по объектам Collection. Fail-Fast итераторы немедленно вызывают ConcurrentModificationException, если есть структурная модификация коллекции. Структурная модификация означает добавление, удаление или обновление любого элемента из коллекции, когда поток выполняет итерацию по этой коллекции. Iterator в классах ArrayList, HashMap - это примеры fail-fast Iterator. import java.util.ArrayList; import java.util.Iterator; public class FailFastIteratorExample { public static void main(String[] args) { // Создание ArrayList целых чисел ArrayList<Integer> list = new ArrayList<Integer>(); // Добавление элементов в список list.add(1452); list.add(6854); list.add(8741); // Получение итератора из списка Iterator<Integer> it = list.iterator(); while (it.hasNext()) { Integer integer = ...

LinkedHashMap в Java

Изображение
LinkedHashMap похож на HashMap с дополнительной функцией поддержания порядка вставленных в него элементов. Класс Java LinkedHashMap - это реализация Hashtable и Linked list интерфейса Map с предсказуемым порядком итераций. Он наследует класс HashMap и реализует интерфейс Map. Характеристики: Java LinkedHashMap содержит значения на основе ключа. Java LinkedHashMap содержит уникальные элементы. Java LinkedHashMap может иметь один нулевой ключ и несколько нулевых значений. Java LinkedHashMap не синхронизируется. Java LinkedHashMap поддерживает порядок вставки. Первоначальная емкость класса Java HashMap по умолчанию составляет 16 с коэффициентом загрузки 0,75. import java.util.LinkedHashMap; import java.util.Set; import java.util.Iterator; import java.util.Map; public class LinkedHashMapDemo { public static void main(String args[]) { // Объявление HashMap LinkedHashMap<Integer, String> lhmap = new LinkedHashMap<Integer, String>(...

Коллекции, предоставляемые интерфейсом Map в Java

Изображение
В дереве наследования интерфейса Map есть несколько реализаций, но только 3 основных, общих и универсальных - это HashMap, LinkedHashMap и TreeMap. HashMap В этой реализации в качестве базовой структуры данных используется хэш-таблица. Он реализует все операции Map и допускает нулевые значения и один нулевой ключ. Этот класс примерно эквивалентен Hashtable - устаревшей структуре данных до Java Collections Framework, но он не синхронизируется и допускает значения null. HashMap не гарантирует порядок элементов "ключ-значение". Поэтому рассмотрите возможность использования HashMap, когда порядок не имеет значения и допустимы значения null. Map<Integer, String> mapHttpErrors = new HashMap<>(); mapHttpErrors.put(200, "OK"); mapHttpErrors.put(303, "See Other"); mapHttpErrors.put(404, "Not Found"); mapHttpErrors.put(500, "Internal Server Error"); System.out.println(mapHttpErrors); Вывод: {404=Not Found, 500=Interna...

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

Изображение
HashMap в Java работает по принципу хеширования. Это структура данных, которая позволяет сохранять объект и извлекать его за постоянное время O(1). При хешировании хеш-функции используются для связывания ключа и значения в HashMap. Объекты сохраняются путем вызова метода put(key, value) HashMap и извлекаются путем вызова метода get(key). Когда мы вызываем метод put, вызывается метод hashcode() ключевого объекта, чтобы хеш-функция карты могла найти место в корзине для хранения объекта значения, который на самом деле является индексом внутреннего массива, известного как таблица. HashMap внутренне хранит отображение в виде объекта Map.Entry, который содержит как объект ключа, так и объект значения. Поскольку внутренний массив HashMap имеет фиксированный размер, и если вы продолжаете хранить объекты, в какой-то момент хеш-функция будет возвращать одно и то же местоположение корзины для двух разных ключей, это называется столкновением в HashMap. В этом случае связанный список формируется в...

Интерфейсы Comparable и Comparator в Java

Изображение
Comparable и Comparator являются интерфейсами и могут использоваться для сортировки элементов коллекции. Comparable Comparator Comparable обеспечивает единую последовательность сортировки. Другими словами, мы можем отсортировать коллекцию на основе одного элемента, такого как идентификатор, имя и цена. Comparator предоставляет несколько последовательностей сортировки. Другими словами, мы можем отсортировать коллекцию по нескольким элементам, таким как идентификатор, имя, цена и т. д. Comparable влияет на исходный класс, т.е. модифицируется фактический класс. Comparator не влияет на исходный класс, т.е. фактический класс не изменяется. Comparable предоставляет метод compareTo() для сортировки элементов. Comparator предоставляет метод compare() для сортировки элементов. Comparable присутствует в пакете java.lang. Comparator присутствует в пакете java.util. Мы можем отсортировать элементы списка типа Comparable методом Collections.sort(List). Мы можем отсортироват...