При программировании разработчику предстоит пользоваться различными функциями и инструментами выбранного языка. Java – один из наиболее перспективных и востребованных в 2022 году. Он отличается простотой и ясностью. А еще – своим спектром встроенных возможностей.
Иногда возникает необходимость хранения набора конкретных элементов в коде. Сюда относят строки, числа, объекты, которые принадлежат к пользовательским классам и так далее. В таких ситуациях на помощь приходят так называемые коллекции Java. Именно о них зайдет речь далее в статье.
Определение
Коллекции – это то, что используется практически во всех приложениях, написанных на Java. Представлены группой элементов или контейнеров, представленных в виде единого целого. Примеры: списки имен, коробки конфет и так далее.
Коллекции – это один из столпов Java Core. Их использование не ограничивается одним Джавой. Они задействуются при написании программного обеспечения на других языках программирования.
Когда коллекции только появились, они насчитывали всего несколько классов:
- Vector;
- Array;
- Hashtable;
- Stack.
В Java 1.2 вниманию разработчиков был представлен полноценный фреймворк – Java Collections Framework. Он актуален по сей день. О нем и пойдет речь далее.
Ключевые компоненты
Коллекции являются весьма важными элементами при программировании. Они состоят из определенных частей:
- Интерфейсов. За счет них уже имеющиеся коллекции предусматривают возможность обеспечения типа данных абстрактного вида для представления корневого интерфейса фреймворка. Он находится на самой вершине иерархии составляющих компонентов коллекций. Включает в себя самые важные методы, задействованные при написании утилит: clear, add, size, iterator, remove. При нормальных условиях они реализовываются в каждой коллекции.
- Реализации. Для коллекций в Java предусмотрено множество реализаций. Их можно применять для создания новых классов. Через множество базовых коллекций удается решать немало задач. В Java5 применяются потокобезопасные коллекции. Они дают возможность корректировать их структуру по компонентам в момент осуществления итерации.
- Алгоритмов. Это – полезные методы, которые позволяют решать множество элементарных задач. Отдельное внимание стоит уделить сортировке, поиску, перетасовке и им подобным.
Java Collections Framework – это очень полезный фреймворк, который дает ряд преимуществ разработчику. Поэтому с ним рекомендуется ознакомиться даже новичкам.
Чем хороши коллекции
Стоит обратить внимание на то, что рассматриваемый фреймворк и его компоненты имеют ряд преимуществ. К ним относят:
- Простоту применения. В состав коллекций входит огромное количество методов, необходимых для управления данных и разных типов collections. Это позволяет концентрироваться не на непосредственной разработке, а на бизнес-логику.
- Высокую эффективность. Качество программного продукта будет зависеть от того, насколько хорошо реализованы в процессе те или иные коллекции.
- Совместимость. А еще можно использовать элементы фреймворка Java повторно.
Все это способствует образованию дополнительных возможностей при разработке. Collections Framework может значительно упростить процедуру создания сложного программного обеспечения. Он подойдет как для работы новичков, так и для продвинутых разработчиков.
Подробнее об интерфейсах
Интерфейсы в Collections – это основа соответствующих фреймворков. Независимо от того, с какими из них предстоит иметь дело, каждый относится к категории Generic. Пример – publicinterface Collection <E>. Символ <E> здесь указывает на тип применяемого объекта, который может располагаться в определенной коллекции. Далее это поможет сократить количество времени, необходимое для поиска ошибок в процессе проверки используемых типов объектов во время компиляции утилиты.
Java для каждого типа Collections не предоставляет отдельные интерфейсы. Если реализация какой-то операции не выходит, программист увидит сообщение UnsupportedOperationException.
Интерфейс итератора
Интерфейс итератора предусматривает все методы, необходимые для выполнения перебора элементов, входящих в структуру выбранной collection. Здесь стоит обратить внимание на следующие моменты:
- Через метод iterator можно получить экземпляр итератора, полученного из collection.
- Во время использования базовых итераций в интерфейсе есть возможность удалить непосредственно из базовой collections отдельные компоненты.
Этого для начала изучения интерфейсов будет достаточно. Далее каждый вариант collections будет рассмотрен более подробно.
Интерфейсы множества (Set)
Set – коллекция Java, которая не может включать в себя повторяемые элементы. Визуально интерфейс выглядит своеобразной математической абстракцией, через которую можно представлять множества под видом колоды карт.
Для применения Set в Джаве предусматриваются различные реализации:
- HashSet;
- TreeSet;
- LinkedHashSet.
Для выполнения перебора элементов в Set нужно использовать цикл или соответствующий итератор.
Интерфейс List
Интерфейс List является достаточно важным для разработки. Списки представлены упорядоченными наборами компонентов, среди которых могут быть повторяющиеся. В данной ситуации, если требуется получить доступ к любому элементу, можно использовать соответствующий процесс непосредственно по индексу. Сам список выглядит в интерфейсе динамическим массивом.
Это – самый распространенный вариант в Java. Для реализации интерфейса выступают LinkedList и ArrayList.
Выше – пример, где используется список.
Очередь
Для того, чтобы хранить одновременно несколько элементов, нужно использовать collection под названием Очередь. Здесь часто применяется правило FIFO относительно размещения имеющихся компонентов. Оно указывает на то, что как только один элемент входит, другой должен сразу же выйти. Те компоненты, что попадают в очередь, будут находиться в ее самом конце.
Dequeue
Dequeue позволяет реализовывать процесс поддержки, удаления, вставки определенного компонента. Можно сделать это как в самом конце, так и в начале collection.
Носит название «двухконцевая очередь». На число используемых элементов здесь не накладываются никакие ограничения.
Соответствующий интерфейс:
- Позволяет определять методы доступа к компонентам, располагаемых по оба конца дека.
- Используется для извлечения, вставки или удаления тех или иных составляющих.
Часто применяется для хранения сразу нескольких элементов.
Map
Map – это интерфейс, который предусматривает в своем составе ключ и некоторое значение. В нем не могут храниться дубликаты первого названного ранее компонента. Для каждого ключа должно устанавливаться единственное значение.
Чтобы реализовывать Map через платформу, можно использовать:
- LinkedHashMap;
- HashMap;
- TreeMap.
Вторая collection – это потокобезопасные коллекции, которые могут реализовывать ConcurrentMap.
ListIterator
Если список нужно пройти любым удобным способом, придется использовать ListIterator. Он предусматривает возможность внесения в список изменений непосредственно в процессе итерации. Позволяет определять позиции, на которых в lists будут располагаться те или иные итераторы.
SortedSet
Это – множество, в котором процесс хранения элементов производится в той последовательности, по которой осуществляется возрастание. Компоненты заданной «цепочки» в другом порядке тут не расставляются.
SortedMap
SortedMap имеет интересную структуру – в ней элементы размещаются в том порядке, в котором осуществляется возрастание их ключей. Представляет собой своеобразный аналог SortedSet. Применяется в основном тогда, когда нужно естественным образом упорядочить значения и ключи. Пример – телефонные справочники, всевозможные словарики.
Классы коллекций
В Java Collection Framework создана немалая база классов, которая помогает реализовывать соответствующие интерфейсы. Самые распространенные – ArrayList, HasSet, а также HashMap. Такие классы обычно не являются потокобезопасными.
HashSet
Класс, который относится к базовым при реализации интерфейса Set. Здесь стоит запомнить следующее:
- Этот класс позволяет задавать одинаковое время, в которое выполняются ключевые операции в программном обеспечении.
- Можно установить начальный коэффициент нагрузки и показатель емкости.
Перечисленные манипуляции HashSet допустимо прописывать в самом начале.
TreeSet
Класс, в основе которого расположен TreeMap. Процесс упорядочения компонентов происходит за счет функционирования компаратора. Возможно в том же порядке, в котором осуществляется их добавление.
Реализация помогает обеспечивать процедуру выполнения базовых операций типа contains, add, remove.
ArrayList
New ArrayList – класс, позволяющий реализовывать в виде массива с переменными показатели длины. Он дает возможность выполнения всех операций, связанных со списками. Дополнительно предусматривает управление размерами массивов, в которых происходит хранение списка. Соответствует направлению вектора в примерном сопоставлении.
LinkedList
Позволяет представлять двусвязными списками интерфейсы List и Deque. Облегчает процесс выполнения всех операций, связанных со списком. Подразумевается категория «дополнительные».
HashMap
Реализация интерфейса Map. Дополнительно позволяет:
- использовать в исходном коде нулевые значения;
- выполнять дополнительные манипуляции, необходимые для Map.
HashMap не относится к синхронизированным. Класс не будет отвечать за упорядочение компонентов в пределах массива.
TreeMap
Визуально представлен черно-красным деревом, реализация которого обеспечивается NavigableMap. Сортировка тут осуществляется через применение компаратора.
PriorityQueue
Это – добавление новых составляющих в порядке приоритетности. Осуществляется через компаратор. Не позволяет хранить нулевые значения.
Collections
Класс, который включает в себя только статические методы, отвечающие за возврат или работу конкретной коллекции. Сюда входят алгоритмы полиморфного типа, которые активно используются при работе с разными видами collections.
Класс позволяет задействовать методы:
- бинарного поиска;
- возвращения обратного порядка;
- перемешивания;
- сортировки.
Рассматривая коллекции и интерфейсы Java, стоит обратить внимание на потокобезопасность.
О потокобезопасности
Пакет Java.util.concurrent предусматривает несколько потокобезопасных collections:
- ConcurrentHashMap – коллекция типа HaspMap, которая позволяет реализовать интерфейс ConcurrentMap;
- CopyOnWriteArrayList – коллекция ArrayList с алгоритмом CopeOnWrite;
- CopyOnWriteArraySet – реализация интерфейса Set, которая в основе использует CopyOnWriteArrayList;
- ConcurrentNavigableMap – расширение интерфейса NavigableMap;
- ConcurrentSkipListMap – аналог TreeMap, который позволяет проводить сортировку по ключу и поддержкой многопоточности;
- ConcurrentSkipListSet – реализация интерфейса Set, которая выполняется на основе класса ConcurrentSkipListMap.
Первые три варианта относятся к категории самых простых и активно применяемых на практике. Под потокобезопасностью принято понимать свойство объекта или всего кода, которое гарантирует, что при реализации нескольких потоков приложение будет вести себя строго определенным образом.
Синхронизированные оболочки
Синхронизированные оболочки в исходный код нужно добавлять, если требуется реализовывать автоматическую синхронизацию. Для шести ключевых interfaces допустимо использование фабричного статического метода синхронизации. Обратить внимание рекомендуется на такие методы public static:
- Collection synchronizedCollection(Collection c);
- Set synchronizedSet(Set s);
- List synchronizedList(List list);
- <K, V> Map<K, V> synchronizedMap(Map<K, V> m);
- SortedSet synchronizedSortedSet(SortedSet s);
- <K, V> SortedMap<K, V> synchronizedSortedMap(SortedMap<K, V> m).
Именно эти методы помогают возвращать потокобезопасные (синхронизированные) collections.
Неизменяемые оболочки
Через неизменяемые оболочки нет возможности добавить процесс изменения collections за счет перехвата операций, которые помогли бы выполнить соответствующую манипуляцию. Здесь принято выделять такие методы:
Многие интересуются, какому варианту отдавать предпочтение при разработке того или иного софта. Связано это с тем, что изучаемый фреймворк в Джаве весьма обширен. Ниже – таблица, которая поможет разобраться, какой вариант лучше всего использовать разработчику.
Этот перечень – example отображения ключевых характеристик, которыми наделены рассмотренные ранее коллекции в Java.
Как быстрее изучить тему
Рассмотренная тема требует определенных навыков, знаний и умений при написании программного обеспечения на Джаве. Существуют различные способы быстрого вливания в выбранное направление:
- Поступление в техникум. Неплохой старт для будущего разработчика, особенно если он решил развиваться еще в школе. Техникумы принимают после 9/11 классов общеобразовательной школы. Тут дадут общие знания об информатике, IT и разработке. В конце будет выдан государственный диплом о среднем профессиональном образовании. Чисто на Java техникумы не специализируются. И на их collections тоже.
- Обучение в ВУЗе. Самое лучшее решение для тех, кто решил озадачиться получением профильного образования. Если человек не смог поступить на бюджет, такой подход окажется весьма дорогостоящим. Многие ВУЗы изучают C++, VB, Python и Java во время лекций. Этот вариант трудно совмещается с основной работой, если выбрана очная форма. Зато здесь достаточно практики, а в конце будет выдан государственный диплом, свидетельствующий о навыках и умениях в сфере разработки.
- Самообучение. Отличное решение для тех, кто обладает хорошей самодисциплиной. Заключается в том, что человек самостоятельно ищет информацию в доступных источниках по интересующей теме. Длительность обучения и частота практики регулируются самостоятельно. Можно заострить внимание на «проблемных» моментах разработки, мельком просмотрев темы по программированию, которые были усвоены быстро. Единственный существенный недостаток – невозможность подтвердить навыки документально. Остается надеяться на сбор портфолио и идеальное прохождение вступительных испытаний при трудоустройстве.
Лучшее решение для быстрого изучения Java и его фреймворков – это обучение на дистанционных онлайн курсах. Пример – направление «Java-разработчик». На специализированных занятиях человека «с нуля» научат писать простые и сложные коды. Всем гарантируется кураторство опытными программистами, интересные домашние задания и практика. Курсы рассчитаны на срок до года. В конце каждый получит электронный сертификат, указывающий на успешное завершение изучения соответствующего направления.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Все о коллекциях в Джаве OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="При программировании разработчику предстоит пользоваться различными функциями и инструментами выбранного языка. Java – один из наиболее перспективных и востребованных в 2022 году. Он отличается простотой и ясностью. А еще – своим спектром встроенных возможностей. Иногда возникает необходимость хранения набора конкретных элементов в коде. Сюда относят строки, числа, объекты, которые принадлежат к пользовательским классам и так" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/vse-o-kollekciyah-v-dzhave/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#article","name":"\u0412\u0441\u0435 \u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445 \u0432 \u0414\u0436\u0430\u0432\u0435 OTUS","headline":"\u0412\u0441\u0435 \u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445 \u0432 \u0414\u0436\u0430\u0432\u0435","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/09\/oj-1080x720-11.png","width":1080,"height":720},"datePublished":"2022-09-11T08:53:46+00:00","dateModified":"2023-10-03T21:51:20+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Java"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#listItem","position":2,"name":"\u0412\u0441\u0435 \u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445 \u0432 \u0414\u0436\u0430\u0432\u0435","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#webpage","url":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/","name":"\u0412\u0441\u0435 \u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445 \u0432 \u0414\u0436\u0430\u0432\u0435 OTUS","description":"\u041f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. Java \u2013 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0438 \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 2022 \u0433\u043e\u0434\u0443. \u041e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439 \u0438 \u044f\u0441\u043d\u043e\u0441\u0442\u044c\u044e. \u0410 \u0435\u0449\u0435 \u2013 \u0441\u0432\u043e\u0438\u043c \u0441\u043f\u0435\u043a\u0442\u0440\u043e\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043a\u043e\u0434\u0435. \u0421\u044e\u0434\u0430 \u043e\u0442\u043d\u043e\u0441\u044f\u0442 \u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0438\u0441\u043b\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u0438 \u0442\u0430\u043a","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/09\/oj-1080x720-11.png","@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/vse-o-kollekciyah-v-dzhave\/#mainImage"},"datePublished":"2022-09-11T08:53:46+00:00","dateModified":"2023-10-03T21:51:20+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/4541" /><link rel='shortlink' href='https://otus.ru/journal/?p=4541' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-kollekciyah-v-dzhave%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-kollekciyah-v-dzhave%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-4541 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-4541" class="the-post post-4541 post type-post status-publish format-standard has-post-thumbnail category-polza tag-java">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Все о коллекциях в Джаве
</h1>
<a href="https://otus.ru/journal/vse-o-kollekciyah-v-dzhave/" class="date-link" data-wpel-link="internal"><time class="post-date">11 сентября, 2022</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-11.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Все о коллекциях в Джаве" title="Все о коллекциях в Джаве" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-11-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-11-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-11-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-11-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-11-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-11-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Определение">Определение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B" title="Ключевые компоненты">Ключевые компоненты</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%A7%D0%B5%D0%BC_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B8_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B8" title="Чем хороши коллекции">Чем хороши коллекции</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9F%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%B5%D0%B5_%D0%BE%D0%B1_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0%D1%85" title="Подробнее об интерфейсах">Подробнее об интерфейсах</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0" title="Интерфейс итератора">Интерфейс итератора</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0_Set" title="Интерфейсы множества (Set)">Интерфейсы множества (Set)</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_List" title="Интерфейс List">Интерфейс List</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C" title="Очередь">Очередь</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#Dequeue" title="Dequeue">Dequeue</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#Map" title="Map">Map</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#ListIterator" title="ListIterator">ListIterator</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#SortedSet" title="SortedSet">SortedSet</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#SortedMap" title="SortedMap">SortedMap</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9" title="Классы коллекций">Классы коллекций</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#HashSet" title="HashSet">HashSet</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#TreeSet" title="TreeSet">TreeSet</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-17" href="#ArrayList" title="ArrayList">ArrayList</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#LinkedList" title="LinkedList">LinkedList</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-19" href="#HashMap" title="HashMap">HashMap</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-20" href="#TreeMap" title="TreeMap">TreeMap</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-21" href="#PriorityQueue" title="PriorityQueue">PriorityQueue</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-22" href="#Collections" title="Collections">Collections</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-23" href="#%D0%9E_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="О потокобезопасности">О потокобезопасности</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-24" href="#%D0%A1%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8" title="Синхронизированные оболочки">Синхронизированные оболочки</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-25" href="#%D0%9D%D0%B5%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8" title="Неизменяемые оболочки">Неизменяемые оболочки</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-26" href="#%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%B5_%D0%B8%D0%B7%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D1%82%D0%B5%D0%BC%D1%83" title="Как быстрее изучить тему">Как быстрее изучить тему</a></li></ul></nav></div>
<p>При программировании разработчику предстоит пользоваться различными функциями и инструментами выбранного языка. Java – один из наиболее перспективных и востребованных в 2022 году. Он отличается простотой и ясностью. А еще – своим спектром встроенных возможностей.</p>
<p>Иногда возникает необходимость хранения набора конкретных элементов в коде. Сюда относят строки, числа, объекты, которые принадлежат к пользовательским классам и так далее. В таких ситуациях на помощь приходят так называемые коллекции Java. Именно о них зайдет речь далее в статье.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Определение<span class="ez-toc-section-end"></span></h2>
<p>Коллекции – это то, что используется практически во всех приложениях, написанных на Java. Представлены группой элементов или контейнеров, представленных в виде единого целого. Примеры: списки имен, коробки конфет и так далее.</p>
<p>Коллекции – это один из столпов Java Core. Их использование не ограничивается одним Джавой. Они задействуются при написании программного обеспечения на других языках программирования.</p>
<p>Когда коллекции только появились, они насчитывали всего несколько классов:</p>
<ul>
<li>Vector;</li>
<li>Array;</li>
<li>Hashtable;</li>
<li>Stack.</li>
</ul>
<p>В Java 1.2 вниманию разработчиков был представлен полноценный фреймворк – Java Collections Framework. Он актуален по сей день. О нем и пойдет речь далее.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B"></span>Ключевые компоненты<span class="ez-toc-section-end"></span></h2>
<p>Коллекции являются весьма важными элементами при программировании. Они состоят из определенных частей:</p>
<ol>
<li>Интерфейсов. За счет них уже имеющиеся коллекции предусматривают возможность обеспечения типа данных абстрактного вида для представления корневого интерфейса фреймворка. Он находится на самой вершине иерархии составляющих компонентов коллекций. Включает в себя самые важные методы, задействованные при написании утилит: clear, add, size, iterator, remove. При нормальных условиях они реализовываются в каждой коллекции.</li>
<li>Реализации. Для коллекций в Java предусмотрено множество реализаций. Их можно применять для создания новых классов. Через множество базовых коллекций удается решать немало задач. В Java5 применяются потокобезопасные коллекции. Они дают возможность корректировать их структуру по компонентам в момент осуществления итерации.</li>
<li>Алгоритмов. Это – полезные методы, которые позволяют решать множество элементарных задач. Отдельное внимание стоит уделить сортировке, поиску, перетасовке и им подобным.</li>
</ol>
<p>Java Collections Framework – это очень полезный фреймворк, который дает ряд преимуществ разработчику. Поэтому с ним рекомендуется ознакомиться даже новичкам.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D0%B5%D0%BC_%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B8_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B8"></span>Чем хороши коллекции<span class="ez-toc-section-end"></span></h2>
<p>Стоит обратить внимание на то, что рассматриваемый фреймворк и его компоненты имеют ряд преимуществ. К ним относят:</p>
<ol>
<li>Простоту применения. В состав коллекций входит огромное количество методов, необходимых для управления данных и разных типов collections. Это позволяет концентрироваться не на непосредственной разработке, а на бизнес-логику.</li>
<li>Высокую эффективность. Качество программного продукта будет зависеть от того, насколько хорошо реализованы в процессе те или иные коллекции.</li>
<li>Совместимость. А еще можно использовать элементы фреймворка Java повторно.</li>
</ol>
<p>Все это способствует образованию дополнительных возможностей при разработке. Collections Framework может значительно упростить процедуру создания сложного программного обеспечения. Он подойдет как для работы новичков, так и для продвинутых разработчиков.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D0%B4%D1%80%D0%BE%D0%B1%D0%BD%D0%B5%D0%B5_%D0%BE%D0%B1_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0%D1%85"></span>Подробнее об интерфейсах<span class="ez-toc-section-end"></span></h2>
<p>Интерфейсы в Collections – это основа соответствующих фреймворков. Независимо от того, с какими из них предстоит иметь дело, каждый относится к категории Generic. Пример – publicinterface Collection <E>. Символ <E> здесь указывает на тип применяемого объекта, который может располагаться в определенной коллекции. Далее это поможет сократить количество времени, необходимое для поиска ошибок в процессе проверки используемых типов объектов во время компиляции утилиты.</p>
<p>Java для каждого типа Collections не предоставляет отдельные интерфейсы. Если реализация какой-то операции не выходит, программист увидит сообщение UnsupportedOperationException.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0"></span>Интерфейс итератора<span class="ez-toc-section-end"></span></h3>
<p>Интерфейс итератора предусматривает все методы, необходимые для выполнения перебора элементов, входящих в структуру выбранной collection. Здесь стоит обратить внимание на следующие моменты:</p>
<ol>
<li>Через метод iterator можно получить экземпляр итератора, полученного из collection.</li>
<li>Во время использования базовых итераций в интерфейсе есть возможность удалить непосредственно из базовой collections отдельные компоненты.</li>
</ol>
<p>Этого для начала изучения интерфейсов будет достаточно. Далее каждый вариант collections будет рассмотрен более подробно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%8B_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0_Set"></span>Интерфейсы множества (Set)<span class="ez-toc-section-end"></span></h3>
<p>Set – коллекция Java, которая не может включать в себя повторяемые элементы. Визуально интерфейс выглядит своеобразной математической абстракцией, через которую можно представлять множества под видом колоды карт.</p>
<p>Для применения Set в Джаве предусматриваются различные реализации:</p>
<ul>
<li>HashSet;</li>
<li>TreeSet;</li>
<li>LinkedHashSet.</li>
</ul>
<p>Для выполнения перебора элементов в Set нужно использовать цикл или соответствующий итератор.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_List"></span>Интерфейс List<span class="ez-toc-section-end"></span></h3>
<p>Интерфейс List является достаточно важным для разработки. Списки представлены упорядоченными наборами компонентов, среди которых могут быть повторяющиеся. В данной ситуации, если требуется получить доступ к любому элементу, можно использовать соответствующий процесс непосредственно по индексу. Сам список выглядит в интерфейсе динамическим массивом.</p>
<p>Это – самый распространенный вариант в Java. Для реализации интерфейса выступают LinkedList и ArrayList.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/iJHLNcI2rNFU6nm13c34_8PXmmtR1Glo0nrKjKa0F8BvnfN4RBcEUsFab5TS9aQrVLOb0zQvF9nzvi3v3LxfYAcmHmNtJVDu2JYhCzRCNYhaX52uqvUCzT0Xb22ATPmuJe1JDwy4xqZkSKis6xR8rWJeufb8vt7eiAeLjsPhCjsoEebqcsBSL8huWo4Gw7ssdZSS0w" alt="Все о коллекциях в Джаве"/></figure>
<p>Выше – пример, где используется список.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C"></span>Очередь<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы хранить одновременно несколько элементов, нужно использовать collection под названием Очередь. Здесь часто применяется правило FIFO относительно размещения имеющихся компонентов. Оно указывает на то, что как только один элемент входит, другой должен сразу же выйти. Те компоненты, что попадают в очередь, будут находиться в ее самом конце.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Dequeue"></span>Dequeue<span class="ez-toc-section-end"></span></h3>
<p>Dequeue позволяет реализовывать процесс поддержки, удаления, вставки определенного компонента. Можно сделать это как в самом конце, так и в начале collection.</p>
<p>Носит название «двухконцевая очередь». На число используемых элементов здесь не накладываются никакие ограничения.</p>
<p>Соответствующий интерфейс:</p>
<ol>
<li>Позволяет определять методы доступа к компонентам, располагаемых по оба конца дека.</li>
<li>Используется для извлечения, вставки или удаления тех или иных составляющих.</li>
</ol>
<p>Часто применяется для хранения сразу нескольких элементов.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Map"></span>Map<span class="ez-toc-section-end"></span></h3>
<p>Map – это интерфейс, который предусматривает в своем составе ключ и некоторое значение. В нем не могут храниться дубликаты первого названного ранее компонента. Для каждого ключа должно устанавливаться единственное значение.</p>
<p>Чтобы реализовывать Map через платформу, можно использовать:</p>
<ul>
<li>LinkedHashMap;</li>
<li>HashMap;</li>
<li>TreeMap.</li>
</ul>
<p>Вторая collection – это потокобезопасные коллекции, которые могут реализовывать ConcurrentMap.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="ListIterator"></span>ListIterator<span class="ez-toc-section-end"></span></h3>
<p>Если список нужно пройти любым удобным способом, придется использовать ListIterator. Он предусматривает возможность внесения в список изменений непосредственно в процессе итерации. Позволяет определять позиции, на которых в lists будут располагаться те или иные итераторы.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="SortedSet"></span>SortedSet<span class="ez-toc-section-end"></span></h3>
<p>Это – множество, в котором процесс хранения элементов производится в той последовательности, по которой осуществляется возрастание. Компоненты заданной «цепочки» в другом порядке тут не расставляются.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="SortedMap"></span>SortedMap<span class="ez-toc-section-end"></span></h3>
<p>SortedMap имеет интересную структуру – в ней элементы размещаются в том порядке, в котором осуществляется возрастание их ключей. Представляет собой своеобразный аналог SortedSet. Применяется в основном тогда, когда нужно естественным образом упорядочить значения и ключи. Пример – телефонные справочники, всевозможные словарики.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9"></span>Классы коллекций<span class="ez-toc-section-end"></span></h2>
<p>В Java Collection Framework создана немалая база классов, которая помогает реализовывать соответствующие интерфейсы. Самые распространенные – ArrayList, HasSet, а также HashMap. Такие классы обычно не являются потокобезопасными.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="HashSet"></span>HashSet<span class="ez-toc-section-end"></span></h3>
<p>Класс, который относится к базовым при реализации интерфейса Set. Здесь стоит запомнить следующее:</p>
<ol>
<li>Этот класс позволяет задавать одинаковое время, в которое выполняются ключевые операции в программном обеспечении.</li>
<li>Можно установить начальный коэффициент нагрузки и показатель емкости.</li>
</ol>
<p>Перечисленные манипуляции HashSet допустимо прописывать в самом начале.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="TreeSet"></span>TreeSet<span class="ez-toc-section-end"></span></h3>
<p>Класс, в основе которого расположен TreeMap. Процесс упорядочения компонентов происходит за счет функционирования компаратора. Возможно в том же порядке, в котором осуществляется их добавление.</p>
<p>Реализация помогает обеспечивать процедуру выполнения базовых операций типа contains, add, remove.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="ArrayList"></span>ArrayList<span class="ez-toc-section-end"></span></h3>
<p>New ArrayList – класс, позволяющий реализовывать в виде массива с переменными показатели длины. Он дает возможность выполнения всех операций, связанных со списками. Дополнительно предусматривает управление размерами массивов, в которых происходит хранение списка. Соответствует направлению вектора в примерном сопоставлении.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="LinkedList"></span>LinkedList<span class="ez-toc-section-end"></span></h3>
<p>Позволяет представлять двусвязными списками интерфейсы List и Deque. Облегчает процесс выполнения всех операций, связанных со списком. Подразумевается категория «дополнительные».</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="HashMap"></span>HashMap<span class="ez-toc-section-end"></span></h3>
<p>Реализация интерфейса Map. Дополнительно позволяет:</p>
<ul>
<li>использовать в исходном коде нулевые значения;</li>
<li>выполнять дополнительные манипуляции, необходимые для Map.</li>
</ul>
<p>HashMap не относится к синхронизированным. Класс не будет отвечать за упорядочение компонентов в пределах массива.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="TreeMap"></span>TreeMap<span class="ez-toc-section-end"></span></h3>
<p>Визуально представлен черно-красным деревом, реализация которого обеспечивается NavigableMap. Сортировка тут осуществляется через применение компаратора.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="PriorityQueue"></span>PriorityQueue<span class="ez-toc-section-end"></span></h3>
<p>Это – добавление новых составляющих в порядке приоритетности. Осуществляется через компаратор. Не позволяет хранить нулевые значения.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Collections"></span>Collections<span class="ez-toc-section-end"></span></h3>
<p>Класс, который включает в себя только статические методы, отвечающие за возврат или работу конкретной коллекции. Сюда входят алгоритмы полиморфного типа, которые активно используются при работе с разными видами collections.</p>
<p>Класс позволяет задействовать методы:</p>
<ul>
<li>бинарного поиска;</li>
<li>возвращения обратного порядка;</li>
<li>перемешивания;</li>
<li>сортировки.</li>
</ul>
<p>Рассматривая коллекции и интерфейсы Java, стоит обратить внимание на потокобезопасность.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>О потокобезопасности<span class="ez-toc-section-end"></span></h2>
<p>Пакет Java.util.concurrent предусматривает несколько потокобезопасных collections:</p>
<ul>
<li>ConcurrentHashMap – коллекция типа HaspMap, которая позволяет реализовать интерфейс ConcurrentMap;</li>
<li>CopyOnWriteArrayList – коллекция ArrayList с алгоритмом CopeOnWrite;</li>
<li>CopyOnWriteArraySet – реализация интерфейса Set, которая в основе использует CopyOnWriteArrayList;</li>
<li>ConcurrentNavigableMap – расширение интерфейса NavigableMap;</li>
<li>ConcurrentSkipListMap – аналог TreeMap, который позволяет проводить сортировку по ключу и поддержкой многопоточности;</li>
<li>ConcurrentSkipListSet – реализация интерфейса Set, которая выполняется на основе класса ConcurrentSkipListMap.</li>
</ul>
<p>Первые три варианта относятся к категории самых простых и активно применяемых на практике. Под потокобезопасностью принято понимать свойство объекта или всего кода, которое гарантирует, что при реализации нескольких потоков приложение будет вести себя строго определенным образом. </p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8"></span>Синхронизированные оболочки<span class="ez-toc-section-end"></span></h3>
<p>Синхронизированные оболочки в исходный код нужно добавлять, если требуется реализовывать автоматическую синхронизацию. Для шести ключевых interfaces допустимо использование фабричного статического метода синхронизации. Обратить внимание рекомендуется на такие методы public static:</p>
<ul>
<li>Collection synchronizedCollection(Collection c);</li>
<li>Set synchronizedSet(Set s);</li>
<li>List synchronizedList(List list);</li>
<li><K, V> Map<K, V> synchronizedMap(Map<K, V> m);</li>
<li>SortedSet synchronizedSortedSet(SortedSet s);</li>
<li><K, V> SortedMap<K, V> synchronizedSortedMap(SortedMap<K, V> m).</li>
</ul>
<p>Именно эти методы помогают возвращать потокобезопасные (синхронизированные) collections.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B5%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8"></span>Неизменяемые оболочки<span class="ez-toc-section-end"></span></h3>
<p>Через неизменяемые оболочки нет возможности добавить процесс изменения collections за счет перехвата операций, которые помогли бы выполнить соответствующую манипуляцию. Здесь принято выделять такие методы:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/VxRp6zBUeVpB6hupQy_blfCeq8I-aBVYMGSa-UmvoKWqHlbnVsjM3ZKVpZaYgQr1AztwDcwxpUprTzlH4Vh0FbXDKdvlNz9ldUMSStNdwGfxqjiVtURAB-MYV9UOPs29M3XcrKeTEBWJXy-5Vqt0U6oxFI6qWD9KW4ZUilOVQONIkNSWBnHr9PxdTMjGF1QvFrh62A" alt="Все о коллекциях в Джаве"/></figure>
<p>Многие интересуются, какому варианту отдавать предпочтение при разработке того или иного софта. Связано это с тем, что изучаемый фреймворк в Джаве весьма обширен. Ниже – таблица, которая поможет разобраться, какой вариант лучше всего использовать разработчику.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/2vSPObYpQFF6o9AaTcRx7k2tLpk8aRriBdAzyNfqYzb2PpsSdombJJURjvzpxfmPaoPTayulXS3acl1LfjLajQplwUar-ixmZL4eAJixb8u_fhMfptajpTvdixgzQ7wSoHX8Tz0pzE6TSJ4PXkBKMTRje755_wdpQmhGnWM-GmWsqbtRVcLQ2wQ67Vs-6XgZHQAp0w" alt="Все о коллекциях в Джаве"/></figure>
<p>Этот перечень – example отображения ключевых характеристик, которыми наделены рассмотренные ранее коллекции в Java.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B5%D0%B5_%D0%B8%D0%B7%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D1%82%D0%B5%D0%BC%D1%83"></span>Как быстрее изучить тему<span class="ez-toc-section-end"></span></h2>
<p>Рассмотренная тема требует определенных навыков, знаний и умений при написании программного обеспечения на Джаве. Существуют различные способы быстрого вливания в выбранное направление:</p>
<ol>
<li>Поступление в техникум. Неплохой старт для будущего разработчика, особенно если он решил развиваться еще в школе. Техникумы принимают после 9/11 классов общеобразовательной школы. Тут дадут общие знания об информатике, IT и разработке. В конце будет выдан государственный диплом о среднем профессиональном образовании. Чисто на Java техникумы не специализируются. И на их collections тоже.</li>
<li>Обучение в ВУЗе. Самое лучшее решение для тех, кто решил озадачиться получением профильного образования. Если человек не смог поступить на бюджет, такой подход окажется весьма дорогостоящим. Многие ВУЗы изучают C++, VB, Python и Java во время лекций. Этот вариант трудно совмещается с основной работой, если выбрана очная форма. Зато здесь достаточно практики, а в конце будет выдан государственный диплом, свидетельствующий о навыках и умениях в сфере разработки. </li>
<li>Самообучение. Отличное решение для тех, кто обладает хорошей самодисциплиной. Заключается в том, что человек самостоятельно ищет информацию в доступных источниках по интересующей теме. Длительность обучения и частота практики регулируются самостоятельно. Можно заострить внимание на «проблемных» моментах разработки, мельком просмотрев темы по программированию, которые были усвоены быстро. Единственный существенный недостаток – невозможность подтвердить навыки документально. Остается надеяться на сбор портфолио и идеальное прохождение вступительных испытаний при трудоустройстве.</li>
</ol>
<p>Лучшее решение для быстрого изучения Java и его фреймворков – это обучение на дистанционных онлайн курсах. Пример – направление «<a href="https://otus.ru/lessons/java-specialization/" title="" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Java-разработчик<span class="wpel-icon wpel-image wpel-icon-6"></span></a>». На специализированных занятиях человека «с нуля» научат писать простые и сложные коды. Всем гарантируется кураторство опытными программистами, интересные домашние задания и практика. Курсы рассчитаны на срок до года. В конце каждый получит электронный сертификат, указывающий на успешное завершение изучения соответствующего направления.</p>
<figure class="wp-block-image"><a href="https://otus.ru/lessons/java-specialization/?utm_source=oj&utm_medium=affilate&utm_campaign=java_bandle" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/07/JavaSpec_Welcome_970x90.png" alt="Все о коллекциях в Джаве" class="wp-image-3895" srcset="https://otus.ru/journal/wp-content/uploads/2022/07/JavaSpec_Welcome_970x90.png 970w, https://otus.ru/journal/wp-content/uploads/2022/07/JavaSpec_Welcome_970x90-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/07/JavaSpec_Welcome_970x90-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/07/JavaSpec_Welcome_970x90-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/java/" rel="tag" data-wpel-link="internal">Java</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-kollekciyah-v-dzhave%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-kollekciyah-v-dzhave%2F&text=%D0%92%D1%81%D0%B5%20%D0%BE%20%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%D1%85%20%D0%B2%20%D0%94%D0%B6%D0%B0%D0%B2%D0%B5" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-kollekciyah-v-dzhave%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fvse-o-kollekciyah-v-dzhave%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2022%2F09%2Foj-1080x720-11.png&description=%D0%92%D1%81%D0%B5%20%D0%BE%20%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%D1%85%20%D0%B2%20%D0%94%D0%B6%D0%B0%D0%B2%D0%B5" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/yazyki-programmirovaniya-harakteristika-opisanie-vidy/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/yazyki-programmirovaniya-harakteristika-opisanie-vidy/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Языки программирования: характеристика, описание, виды" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-10-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Языки программирования: характеристика, описание, виды" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/yazyki-programmirovaniya-harakteristika-opisanie-vidy/" data-wpel-link="internal">Языки программирования: характеристика, описание, виды</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/yazyki-programmirovaniya-harakteristika-opisanie-vidy/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-09-11T08:17:14+00:00">11 сентября, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">8 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/ocenka-raboty-sotrudnikov/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/ocenka-raboty-sotrudnikov/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Оценка работы сотрудников" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/09/oj-1080x720-12-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Оценка работы сотрудников" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/ocenka-raboty-sotrudnikov/" data-wpel-link="internal">Оценка работы сотрудников</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/ocenka-raboty-sotrudnikov/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-09-11T09:01:30+00:00">11 сентября, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">11 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"0"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"0","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/vse-o-kollekciyah-v-dzhave\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 18:31:25 GMT -->