JavaRush /Курсы /Модуль 1. Java Syntax /Java Collections Framework

Java Collections Framework

Модуль 1. Java Syntax
17 уровень , 0 лекция
Открыта

Введение

Практически во всех программах возникает потребность хранить набор каких-либо данных. Это могут быть строки и числа, объекты и т.п. Для этих целей как нельзя кстати подходят массивы. Но у массивов есть некоторые ограничения. Например, фиксированный размер, отсутствие возможности удалять элементы, вставлять элементы в середину. Для обхода этого и других ограничений создали коллекции. Во всех типах коллекций (а их много, как мы увидим далее по ходу этой лекции), есть возможность динамически изменять свой размер. Некоторые типы коллекций могут хранить упорядоченные элементы и автоматически упорядочивать новые элементы по мере их добавления.

В этой лекции мы ознакомимся с иерархией классов базовых коллекций Java Collections Framework. Еще существуют различные альтернативные библиотеки, которые расширяют возможности стандартной Java Collections Framework. Наиболее популярная из них — Guava (Google Collections Library).

* На схеме представлены далеко не все интерфейсы и классы. Некоторые упущены для простоты понимания

Основные интерфейсы

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

Давай рассмотрим эти интерфейсы:

  1. Collection – обычная коллекция, которая содержит набор отдельных элементов (объектов). В этой коллекции есть основные методы для работы с элементами: вставка (add, addAll), удаление (remove, removeAll, clear), поиск (contains, containsAll), проверка на пустоту коллекции (isEmpty) и размер (size).

  2. Map — коллекция, структура которой представляет собой пары "ключ — значение". Причем в рамках одной Map каждый ключ уникален: нет двух одинаковых по значению ключей. Также эту коллекцию иногда называют словарем (dictionary). Map — это отдельный интерфейс. Он не реализует интерфейс Collection, но входит в Java Collections Framework.

Основные методы для работы с элементами Map:

  • вставка (put, putAll)

  • получение (get, keySet, values, entrySet)

  • удаление (remove, clear)

  • поиск (containsKey, containsValue)

  • проверка на пустоту коллекции (isEmpty)

  • размер (size)

А теперь давай подробнее поговорим о каждом из них.

Интерфейс Collection

Интерфейс Collection расширяет интерфейс Iterable, а у этого интерфейса есть единственный метод iterator(). Для нас это означает, что любая коллекция, которая наследуется от Iterable, будет уметь возвращать итератор.

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

Из рисунка видно, что от интерфейса Collection наследуется 3 интерфейса: List, Queue и Set. Сейчас кратко рассмотрим каждый из них.

List — это упорядоченная коллекция, допускающая дубликаты среди значений. Также можно встретить и другие название — последовательность (sequence), список. Особенностью List является то, что элементы пронумерованы и к ним можно обращаться по номеру (индексу).

Queue — переводится с английского как очередь. Правильное произношение: Queue — КЬЮ. В Queue элементы хранятся в порядке добавления их в очередь.

Set – в отличие от списка, описывает неупорядоченную коллекцию, в которой нет повторов элементов. У Set есть соответствие с понятием в математике — м множество (set).

Реализации интерфейса Map

В интерфейсе Map мы можем видеть соотношение уникальных ключей со значениями.


interface Мар<К, V>

где К — это тип ключей, а V — тип хранимых значений.

По ключу мы можем извлекать данные из Map. Для добавления элемента в Map нужно задать ключ и значение.

Рассмотрим некоторые реализации Map:

  1. HashMap — реализация Map, в основе которой лежат хэш-таблицы. Может хранить ключи и значения любых типов, в том числе и null. Порядок элементов не гарантирован.

  2. LinkedHashMap — структура данных, хранит данные в виде связного списка элементов. Элементы расположены в том порядке, в котором они добавлялись.

  3. TreeMap — реализует интерфейс SortedMap (через NavigableMap). Элементы в такой структуре хранятся в отсортированном виде (при добавлении нового элемента коллекция сортируется автоматически). TreeMap отлично подходит для хранения больших объемов отсортированной информации с осуществлением быстрого поиска.

Устаревшие коллекции

От прошлых версий Java остались устаревшие коллекции (для поддержания обратной совместимости), которые использовать не рекомендуется:

  • Enumeration — аналог интерфейса Iterator;

  • Vector — упорядоченный список элементов, аналог класса ArrayList;

  • Stack — структура, которая реализует хранение элементов по принципу стека (например, стопка книг), есть методы вталкивания (push) и выталкивания (pop) элементов;

  • Dictionary — аналог интерфейса Map, но является абстрактным классом;

  • Hashtable — аналог HashMap.

Подробнее о Collections Framework ты можешь прочесть в этой статье Коллекции в Java | Java Collections.

Комментарии (23)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Руслан Уровень 48
2 августа 2025
Интерфейсы это что типа класса но от них нельзя наследоваться их можно только реализовывать другим классом а с самих интрерфейсах есть методы с контрактом ну тип как они должны работать а саму реализацию должен делать класс который реализовывает этот интерфейс .Надеюсь понятно объяснил
Семён Уровень 69
23 февраля 2025
Ты ничего не понял? Эт норма. Впереди ждет куча задач, в которых будешь использовать и ArrayList, и TreeSet, и Map. И поймешь, что это такое, зах и нах. Черт ногу сломит, че написано в этой лекции. Крч, есть: 1) Списки (ArrayList) - апнутый массив. Закидываешь туда элементы. Спокойно их оттуда достаешь, удаляешь, меняешь, ищешь. 2) Сеты или множества (HashSet, TreeSet). Сюда ты также закидываешь эелементы. НО! - Элементы не могут повторяться (если закинешь в сет "ААА", "ВВВ", "ССС", "ААА", "ДДД" - в сете будет "ААА", "ВВВ", "ССС", "ДДД"). Например, тебе дали список книг. И в этом списке некоторые произведения по несколько штук: 100шт Войны и мира, 15шт Тихого дона, 228шт Истории государства Российского. И тебе над сделать список, в котором прост перечислятся какие вообще произведения там есть. Вот ты это все закидываешь в HashSet. И он сам поудаляет лишние повторы. Если закинишь в TreeSet - то он еще и в алфовитном порядке все это предоставит. - У элементов нет последовательности. В ArrayList ты мог написать list.get(4) - и тебе дадут элемент с инлексом 4. Тут такого нет. Тут каждый раз будет рандомный элемент. 3) Словарь (Map) - тут все элементы хранятся попарно: Ключ - Значение. ВНИМАНИЕ: значения повторяться могу, а ключи повторяться не могут. Например, тебя зовут Миша. Есть еще hуего-тутуего Миш. Это значение. А вот серийный номер твоего паспорта - это ключ. Такого номера в паспорте больше ни у кого нет. Выглядит так: id 228 - Иван id 322 - Артем id 100500 - Иван id 146 - Вова
Рубен Уровень 80
6 марта 2025
да нормально тут всё написано, коллекции довольно простая тема, и расписано норм. Разве что рекомендую найти и посмотреть как устроены интерфейсы Collection и Map (гуглится на раз два) а так всё довольно просто
Andrei Miroshnichenko Уровень 1
12 июня 2025
нихрена не нормально для того, кто впервые вообще сталкивается с программированием. обьяснение понятий коллекция, interface, map, и т.д ужасные. пришлось с чатом жипити общаться, чтобы он разжевал
Vasiliy Emelin Уровень 25
24 ноября 2024
Видео объяснение — рацея. Сложные вещи нужно объяснять простыми словами. 1. Интерфейсы это правила - стандарты описания объекта. 2. Классы это объекты с набором свойств и действий (методов), которые определены интерфейсами и точка. 3. Покажите примеры на чистых листах, или готовый sitemap которой отражает архитектуру и суть этих сущностей, не показывайте чужой код который не имеет никакого отношения к лекциям, хотябы примеры с чистого листа, открыл — начал писать и объяснять показывая разницу. 4. Накидываете куча собственных видений, которые только зашоривают взгляд на и без того не легкие вещи для понимания новичкам.
Ardan Уровень 57
22 ноября 2024
Короче как я понял Коллекции это общие методы которые позволяют работать с ArrayList , Stack и тд объясните что такое интерфейс я туплю Дополняю я понял интерфейсы это List Map Set и Collections - это так сказать общие методы для работы с каким либо классом в свою очередь классы это ArrayList(list) HashMap(Map) HashSet(set) LinkedList(list) А Collection Framework это общие методы которые могут работать с любыми коллекциями кроме Map у него видимо отдельные методы которые позволяют работать с классами интерфейса Map
Viktoryia Ka Уровень 106
7 августа 2024
* На схеме представлены далеко не все интерфейсы и классы. Некоторые упущены для простоты понимания 🤪
Serge Menko Уровень 58
6 августа 2024
3 раза посмотрел, 1 раз посмотрел и понял что ничего не понял....
Рубен Уровень 80
6 марта 2025
а как ты разрабом то работаешь если коллекции не понимаешь? это ж тебе не хибер и не спринг, вещь простая)))
Церен Арсинов Уровень 57
24 июня 2024
Александр) Я уже в ужасе от увиденного!
Олег Уровень 106 Expert
25 мая 2024
Пока что в шоке
Руслан Никитин Уровень 109
9 июня 2024
это мы еще до ввода/вывода не дошли, и тредов.. крепись😁
Светлана Уровень 1 Expert
6 декабря 2022
Коллеги, для кого тоже сложна к восприятию эта лекция, пожалуйста, статья на Хабре, где, на мой взгляд, более четко сформулировано, что вообще такое Java Collections Framework, и его базовые понятия https://habr.com/ru/post/237043/ и вот этот товарищ тоже отлично рассказывает https://habr.com/ru/post/129037/
Андрей Уровень 101 Expert
12 сентября 2022
Интерфейс - это...
jvatechs Уровень 111 Expert
27 ноября 2022
Интерфейс – это ссылочный тип в Java. Он схож с классом. Но в отличие от класса он не имеет реализации. вот цитата: Интерфейс это конструкция языка Java, в рамках которой принято описывать абстрактные публичные (abstract public) методы и статические константы (final static). С помощью интерфейса можно указать, что именно должен выполнять класс его реализующий, но не как это делать. Способ реализации выбирает сам класс. Интерфейсы не способны сохранять данные состояния.