Сообщения

Показаны сообщения с ярлыком "Java Collections Framework"

Когда использовать ArrayList, а когда LinkedList

Изображение
ArrayList с ArrayDeque предпочтительнее во многих других случаях использования, чем LinkedList. Если вы не уверены - начните с ArrayList. В ArrayList доступ к элементу занимает линейное время, а добавление элемента занимает время O(n) (худший случай). В LinkedList добавление элемента занимает O(n) времени, а доступ также занимает O(n) времени, но LinkedList использует больше памяти, чем ArrayList. LinkedList и ArrayList - две разные реализации интерфейса List. LinkedList реализует его с помощью двусвязного списка. ArrayList реализует его с помощью массива динамического изменения размера. Как и в случае стандартных операций со связанными списками и массивами, различные методы будут иметь разное время выполнения алгоритмов. Для LinkedList<E> get(int index) равно O(n) (в среднем n/4 шагов), но O(1), когда index = 0 или index = list.size() - 1 (в этом случае вы также можете использовать getFirst() и getLast()). Одно из основных преимуществ LinkedList<E> add(int index, E ...

Интерфейс Collection: коллекции представлений, неизменяемые коллекции

Изображение
Коллекции представлений Большинство коллекций управляют хранением содержащихся в них элементов. Напротив, коллекции представлений (view collections) сами по себе не хранят элементы, а вместо этого полагаются на вспомогательную коллекцию для хранения фактических элементов. Операции, которые не обрабатываются самой коллекцией представлений, делегируются вспомогательной коллекции. Примеры коллекций представлений включают коллекции оболочек, возвращаемые такими методами, как Collections.checkedCollection, Collections.synchronizedCollection и Collections.unmodifiableCollection. Другие примеры коллекций представлений включают коллекции, которые обеспечивают другое представление одних и тех же элементов, например, предоставляемое List.subList, NavigableSet.subSet или Map.entrySet. Любые изменения, внесенные в вспомогательную коллекцию, отображаются в коллекции представлений. Соответственно, любые изменения, внесенные в коллекцию представлений - если изменения разрешены - записываются в вспом...

Интерфейс Collection в Java

Изображение
Корневой интерфейс в иерархии коллекции. Коллекция представляет собой группу объектов, называемых ее элементами. Некоторые коллекции позволяют дублировать элементы, а другие нет. Некоторые упорядочены, а другие нет. JDK не предоставляет прямых реализаций этого интерфейса: он предоставляет реализации более конкретных подинтерфейсов, таких как Set и List. Этот интерфейс обычно используется для передачи коллекций и управления ими там, где требуется максимальная универсальность. Пакеты или мультимножества (неупорядоченные коллекции, которые могут содержать повторяющиеся элементы) должны реализовывать этот интерфейс напрямую. Все универсальные классы реализации Collection (которые обычно реализуют Collection косвенно через один из ее подинтерфейсов) должны предоставлять два «стандартных» конструктора: конструктор void (без аргументов), который создает пустую коллекцию, и конструктор с одним аргументом типа Collection, которая создает новую коллекцию с теми же элементами, что и ее аргумент....

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

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

Коллекции, предоставляемые интерфейсом 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...