Разное

Класс collections в java: Класс Collections. Курс «Программирование на Java»

Java Collections Framework — что это за коллекции объектов

Коллекции в Java — это общее название для нескольких похожих друг на друга структур данных. Это сложные типы, в которых может храниться большое количество значений — как в таблице или в перечне.

Что представляют собой коллекции?

Более простой пример структур — массивы: в них, как в списке или в ряду, хранится сколько-то значений. Но в отличие от массивов коллекции динамические, то есть у них не фиксированная длина. Их размер может меняться, туда можно добавлять и удалять элементы с помощью методов — функций, которые реализуют поведение.

Например, возьмем список чисел: [1, 1, 2, 3, 5]. Весь список — структура данных, в которой хранится 5 элементов. Если к нему можно добавить шестой элемент, допустим 8, — это динамическая структура данных, и она вполне может относиться к коллекциям. На месте чисел могут быть строки, объекты и другие типы данных. Главное — элементы должны быть однородными, одинакового типа. Основных видов коллекций три: List, Set, Queue. Еще есть Map — не коллекция, но связанная с ними структура данных.

Кто пользуется коллекциями

Коллекции нужны каждому Java-разработчику. Динамические структуры данных — это важная и нужная часть языка. Их используют для хранения, обработки и передачи информации, с информацией работает любая программа. При трудоустройстве начинающего Java-разработчика скорее всего будут спрашивать о коллекциях и о том, что он о них знает.

Для чего нужны коллекции

Структуры данных нужны для хранения и получения информации. Но если они статические, в определенный момент пользоваться ими становится неудобно: фиксированное количество элементов не даст расширить структуру. А создавать сразу большой массив неэффективно с точки зрения памяти.

Поэтому существуют динамические структуры. Так как они меняют размер, в них можно хранить практически любое количество информации и не опасаться, что они займут больше места, чем необходимо. Это делает программирование более удобным и ускоряет работу с данными.

Разные варианты коллекций нужны, потому что для различных задач требуются свои особенности хранения и обработки данных. Где-то они должны быть структурированными, а где-то — допустим, уникальными. В одной задаче важно быстро получать элементы, в другой — быстро добавлять. Поэтому реализации разные, и для каждой задачи эффективнее своя.

Что такое Java Collections Framework

Java Collections Framework — это часть JDK, или Java Development Kit, в которой описаны и хранятся коллекции, их устройство и иерархия. Несмотря на название «фреймворк», это не отдельный инструмент, а одна из важных частей языка Java, точнее, набора инструментов для него. Там содержатся интерфейсы, которые описывают коллекции, и практические реализации. Интерфейс — это как бы «схема», теоретическое описание поведения объектов. В нем содержатся методы, которые есть у всех его реализаций. А реализация — потомок интерфейса, практическая структура: такой объект можно создать и пользоваться им.

Интерфейс по определению похож на класс, но отличается от него тем, что может хранить только поведение — методы. У него, в отличие от класса, не может быть атрибутов — внутренних переменных, хранящих состояние. Подробнее про класс как сущность можно прочитать в статье про ООП.

Подробнее об интерфейсах

У интерфейсов есть иерархия — более специфические наследуются от более общих. Это значит, что у них есть методы «предка», но есть и свои, специфичные особенности хранения и методы. А реализации — конечные наследники интерфейсов. Получается наглядная иерархическая схема, где одно вытекает из другого.

Ниже мы рассмотрим разные виды интерфейсов и их практические реализации. Сначала поговорим о базовых интерфейсах, от которых зависит работа всех остальных, а потом перейдем к более специфичным.

Iterable

Это основной, корневой интерфейс. От него наследуются все прочие. Он означает, что объект итерируемый, то есть перечислимый. Так называются сущности, элементы которых можно перечислять по очереди: по индексам, названию или расположению в структуре. То есть это практически все сложные объекты, где хранится множество значений.

У Iterable и, соответственно, у всех интерфейсов, которые от него наследуются, есть метод iterator(). Он возвращает итератор — специальную сущность-«перечислитель», своеобразный курсор, который указывает на тот или иной объект. С помощью итераторов мы получаем доступ к разным значениям коллекции.

Есть только одна сущность, которая не наследуется от Iterable, но тем не менее часто упоминается вместе с коллекциями и входит в Collections Framework. Это Map, и мы поговорим об этом типе ниже.

Iterator

У итератора тоже есть свой интерфейс. Он описывает такие курсоры и возможности, которые у них есть. Методы итератора — это next(), который возвращает следующий элемент, remove(), который удаляет текущий элемент, и hasNext() — он показывает, существует ли в коллекции следующий элемент.

Collection

Часто пишут, что Collection — это основной и самый главный интерфейс. Технически это не совсем так, потому что он все же наследуется от Iterable, но фактически считается базовым. Он описывает понятие коллекции и тем самым расширяет возможности итерируемого объекта.

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

Объекты, которые относятся к коллекциям, можно перебирать в цикле for-each. У них есть ряд общих методов, актуальных для всех видов коллекций. Исключение — только Map, который в целом выпадает из этой иерархии.

Методы Collection

  • add(item) — добавляет элемент item в коллекцию;
  • addAll(collection) — добавляет в коллекцию другую коллекцию, ту, что указана в скобках;
  • contains(item) — возвращает true или false в зависимости от того, есть ли в коллекции элемент item;
  • containsAll(collection) — работает так же, как предыдущий, но проверяет наличие в коллекции не элемента, а другой коллекции;
  • remove(item) — удаляет из коллекции указанный элемент;
  • retainAll(collection) — удаляет из коллекции указанную в скобках коллекцию. Обратите внимание: retainAll, не removeAll;
  • clear() — очищает коллекцию, то есть удаляет из нее все элементы;
  • size() — выдает количество элементов в коллекции в формате целого числа;
  • isEmpty() — возвращает true или false в зависимости от того, пуста ли коллекция;
  • toArray() — превращает коллекцию в массив.

List

Перейдем к дочерним интерфейсам Collection. Их три: List, Set и Queue — правда, от них могут наследоваться другие, дополненные или расширенные интерфейсы. Но основных потомков именно три.

List — интерфейс, который традиционно рассматривают первым и которым пользуются чаще всего. Название переводится как «список»: интерфейс представляет собой упорядоченную коллекцию данных, похожую на массив. Это значит, что у его элементов есть порядковые номера, показывающие их расположение в списке, — индексы. Но, в отличие от массива, List динамический, о чем мы говорили выше, — в нем можно изменять количество элементов.

Реализации. Классический динамический массив, или ArrayList, — не единственная реализация List. Сейчас их как минимум четыре, но основной признак всех — упорядоченность элементов.

Вторая распространенная реализация — LinkedList, связанный список. Он отличается от ArrayList наличием связности: в каждом элементе есть указатели на предыдущий и следующий элемент. Методы у него такие же, как у динамического массива, но действия с таким списком различаются сложностью выполнения и скоростью. Методы add() и remove() в связанном списке имеют фиксированную скорость выполнения, поэтому оптимальнее. А вот обращение к элементу по индексу быстрее в ArrayList.

Есть еще две реализации, о которых говорят реже. Это Vector и его потомок Stack. Vector похож на ArrayList, но сейчас им не рекомендуют пользоваться — он синхронизированный, за счет этого более потокобезопасный, но менее производительный. Исключение — редкие ситуации с высокими требованиями к потоковой безопасности.

Stack — это стек, работающий по принципу LIFO (last in, first out). Доступ начинается с того элемента, который добавлен в структуру последним, как взятие верхней карты из колоды. Его же быстрее всего можно удалить. Для просмотра последнего элемента есть метод peek(), для просмотра с удалением — pop(), а для добавления элемента в конец — push().

Set

Set, или набор, — это математическое множество, реализованное в языке программирования. Если проще, это коллекция уникальных значений. Ни одно из них не повторяется в рамках одного сета. Для проверки равенства у такой коллекции есть специальный метод equals().

Коллекция не упорядочена, то есть у ее элементов нет порядковых номеров и четких позиций следования. Это может понадобиться при хранении разных структур данных, например имен пользователей сайта: никнеймы уникальны, а порядковых номеров у них нет.

У Set есть два дочерних интерфейса SortedSet и NavigableSet — соответственно, отсортированный и навигируемый сеты. Фактических реализаций три, и о них стоит поговорить подробнее.

Реализации. Часто используется реализация HashSet — это сет, внутри которого, кроме объектов, находится хэш-таблица для хранения данных. Хэш-таблица реализована с помощью HashMap — одной из реализаций интерфейса Map, о котором мы частично упоминали и подробнее поговорим позже.

Похожая на предыдущую реализация LinkedHashSet — связанный сет, в котором объекты упорядочены. Они хранятся в том же порядке, в котором были добавлены в коллекцию. Внутри для хранения используется объект LinkedHashMap.

Третий вариант — TreeSet, который хранит свои элементы в виде упорядоченного красно-черного дерева. Дерево — особая структура данных, о которой подробнее можно прочитать в теоретических материалах по информатике или в наших статьях. Оно удобно для хранения разветвленных и иерархически связанных друг с другом данных, а еще в дереве быстрее выполняются операции add(), remove() и contains().

Queue

Третий прямой наследник Collection — очередь, или Queue. Очередь и стек — два похожих формата, которые различаются принципом доступа к элементам. Если в стеке мы имеем быстрый доступ к последним добавленным частям, то в очереди — к тем, которые были добавлены первыми. Такой принцип называется FIFO (first in, first out) и действительно напоминает живую очередь. Соответственно, быстро получить и удалить элемент можно из начала очереди, а добавить — только в ее конец.

Доступ к первому элементу можно получить с помощью методов element() и peek(), которые различаются реакцией на вызов для пустой очереди. Удалить первый элемент, предварительно вернув его, можно с помощью методов remove() и poll() — они различаются тем же. Добавить элемент в конец очереди можно через метод offer(item).

Реализации. У Queue две основных реализации. Одна из них — PriorityQueue, прямая реализация, которая по умолчанию сортирует элементы в порядке их появления в очереди. Но это можно переопределить в конструкторе — специальном методе для создания объекта. Там можно задать связь с интерфейсом Comparator, который будет сравнивать элементы очереди и располагать их в зависимости от значений.

Вторая реализация чуть сложнее. У Queue есть потомок под названием Deque (читается как «дек»). Он расширяет Queue и добавляет возможность создавать коллекции, работающие по принципу LIFO — мы говорили о нем выше. По сути, получается двунаправленная очередь. Так вот вторая реализация называется ArrayDeque и технически является реализацией интерфейса Deque, а не Queue. Но Deque — потомок Queue, так что ArrayDeque периодически называют реализацией Queue.

Упомянутый выше LinkedList — реализация, принадлежащая не только List, но и Deque.

Map

Мы поместили описание интерфейса вниз, потому что технически он не относится к иерархии коллекций. Он не является потомком Iterable и, соответственно, Collection, у него нет общих для коллекций методов, это другой вид объекта, и методы у него свои. Но мы решили упомянуть о нем в контексте коллекций, потому что они часто объясняются и используются вместе. При этом Map — другой вид объекта, и принцип построения у него отличается.

Map, «карта», он же «словарь» или ассоциативный массив — это список формата «ключ-значение». Представьте себе таблицу, где данные указаны, например, в таком формате:

Имя: Иван

Фамилия: Иванов

«Имя» и «Фамилия» будут ключами, а «Иван» и «Иванов» — значениями. По такому принципу данные хранятся в Map: вместо индексов у них ключи. Map не итерируется, потому что сложно сказать, какой из ключей можно назвать «первым», а какой «вторым», — это неупорядоченная структура.

Реализации. У Map три непосредственных реализации и один дочерний интерфейс, который в свою очередь имеет свою реализацию. Дочерний интерфейс называется SortedMap, от него наследуется еще один интерфейс NavigableMap, а уже у него есть реализация под названием TreeMap — карта в виде дерева. Выше мы говорили о деревьях в контексте сетов. Структурирование дерева в сете возможно благодаря наличию в объекте элемента TreeMap для хранения позиций.

Непосредственные реализации — это Hashtable, HashMap и WeakHashMap.

Hashtable — это хэш-таблица: о том, что это такое, мы рассказывали в статье про хэш. Но именно эта реализация сейчас не рекомендована к использованию: она синхронизированная и из-за этого работает медленнее современных методов.

HashMap — более новая альтернатива Hashtable. Она отличается от предыдущей двумя деталями: HashMap не синхронизированная, а еще в ней можно в качестве значения или ключа хранить null — «отсутствие», нулевую или пустую сущность. Эта реализация не отсортирована.

Его потомок LinkedHashMap — это отсортированный словарь. В нем элементы располагаются не случайно, в зависимости от хэша, а в порядке добавления.

Третий вариант — WeakHashMap, вариация, значения которой могут автоматически удалиться сборщиком мусора, если на них никто не ссылается.

Как разобраться с коллекциями

Все вышеперечисленное может сначала показаться сложным: слишком много похожих друг на друга сущностей, которые различаются мелкими деталями. Но это не повод переживать. Сначала запутаться действительно легко, но стоит начать применять эти сущности на практике — и вы разберетесь, чем они различаются и как с ними работать.

Практически все перечисленные структуры оптимальны для конкретных задач и используются тогда, когда их применение выгодно с точки зрения производительности. Это опыт, который нарабатывается и узнается со временем.

Как начать работать с коллекциями

Для работы с коллекциями потребуется установленный язык Java и JDK. Работать лучше в среде программирования, или IDE. Это удобнее, чем писать в консоли или «Блокноте».

Чтобы начать работать с коллекциями, нужно подключить к программе пакет java.util — именно там хранится Java Collection Framework. По умолчанию он не подключен к коду, чтобы сэкономить вычислительные ресурсы на случай, если описанные сущности не понадобятся.

Java – Коллекции: интерфейсы, классы, итератор, примеры

Вплоть до Java 2, Java предоставляла особые классы, такие как Dictionary, Vector, Stack, и Properties для хранения и управления группами объектов. Хоть эти классы были полезными, им не хватало центральной, объединяющей тематики. Именно поэтому то, как вы использовали Vector отличается от того, как вы использовали Properties.

Структура коллекций в Java была создана для того чтобы удовлетворять таким целям, как:

  • Фреймворк должен быть высокопроизводительным. Реализации фундаментальных коллекций (динамические массивы, связанные списки, деревья и хэш-таблицы) должны быть высокоэффективными.
  • Фреймворк должен позволять разным типам коллекций работать аналогичным образом и с высокой степенью совместимости.
  • Фреймворк должен уметь расширяться и/или легко адаптировать коллекцию

С этой целью вся структура коллекций разработана вокруг набора стандартных интерфейсов. Несколько стандартных реализаций типа LinkedList, HashSet, и TreeSet из этих интерфейсов предоставляются таким образом, что вы можете их использовать «как есть» или можете реализовать свою собственную коллекцию по вашему выбору.

Фреймворк коллекций – это объединённая архитектура для представления и управления коллекциями. Все структуры коллекций содержат в себе следующее:

  • Интерфейсы – это абстрактные типы данных, которые представляют коллекции. Интерфейсы позволяют управлять коллекциями вне зависимости от деталей их представления. В объектно-ориентированных языках интерфейсы обычно формируют иерархию.
  • Реализации, т.e. классы – Это конкретные реализации интерфейсов коллекций. По сути, они являются структурными данных, которые можно многократно использовать.
  • Алгоритмы
    – это методы, которые выполняют полезные вычисления с объектами, которые реализуют интерфейсы коллекций, например поиск и сортировку. Алгоритмы считаются полиморфными, то есть один и тот же метод может быть использован во множестве различных реализаций соответствующего интерфейса коллекций.

Помимо коллекций, фреймворк определяет некоторые интерфейсы и классы карт. Карты хранят пары ключ/значение. Хоть карты не являются коллекциями в обычном их понимании, но они полностью интегрированы с коллекциями.

Интерфейсы коллекций

Структура коллекций определяет некоторые интерфейсы в Java. Этот раздел вкратце описывает каждый из них.

Интерфейс и описание
1Интерфейс Collection
Позволяет работать с группами объектов; находится на вершине иерархии коллекций.
2Интерфейс List
Расширяет Collection и экземпляр List хранит упорядоченный набор элементов.
3Интерфейс Set
Расширяет Collection, чтобы обрабатывать наборы, которые должны содержать уникальные элементы.
4SortedSet
Расширяет Set для обработки отсортированных наборов.
5Map
Привязывает уникальные ключи к значениям
6Map. Entry
Описывает элемент (пара ключ/значение) в карте. Это внутренний класс Map.
7SortedMap
Расширяет Map так, чтобы ключи были расположены в порядке возрастания.
8Enumeration
Устаревший интерфейс, определяющий методы, которым вы можете перечислить (получать по одному за раз) элементы в коллекции объектов. Этот устаревший интерфейс был заменен Iterator

Классы коллекций

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

Стандартные классы коллекций в Java приведены в следующей таблице:

Класс и описание
1AbstractCollection
Реализует большую часть интерфейса Collection
2AbstractList
Расширяет AbstractCollection и реализует большую часть интерфейса List
3AbstractSequentialList
Расширяет AbstractList для использования коллекцией, которая использует последовательный, а не произвольный доступ к своим элементам.
4LinkedList
Реализует связанный список, расширяя AbstractSequentialList.
5ArrayList
Реализует динамический массив, расширяя AbstractList
6AbstractSet
Расширяет AbstractCollection и реализует большую часть интерфейса Set.
7HashSet
Расширяет AbstractSet для использования в хэш-таблице
8LinkedHashSet
Расширяет HashSet, чтобы разрешить итерации порядка вставки.
9TreeSet
Реализует набор, хранящийся в дереве. Расширяет AbstractSet.
10AbstractMap
Реализует большую часть интерфейса Map.
11HashMap
Расширяет AbstractMap для использования хэш-таблицы
12TreeMap
Расширяет AbstractMap для использования дерева.
13WeakHashMap
Расширяет AbstractMap для использования хеш-таблицы со слабыми ключами.
14LinkedHashMap
Расширяет HashMap, чтобы разрешить итерации порядка вставки.
15IdentityHashMap
Расширяет AbstractMap и использует равенство ссылок при сравнении документов.

Классы AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList и AbstractMap предоставляют скелетные реализации интерфейсов основной коллекции в Java, чтобы свести к минимуму усилия, необходимые для их реализации.

Следующие устаревшие классы, определённые java.util, обсуждались в предыдущей главе:

Класс и описание
1Vector
Реализует динамический массив. Схож с ArrayList, но с некоторыми отличиями.
2Stack
Stack – это подкласс Vector, который реализует стандартный стэк «последним пришёл – первым ушёл».
3Dictionary
Dictionary – это абстрактный класс, который представляет собой хранилище ключей/значений и работает так же, как и Map.
4Hashtable
Hashtable был частью оригинального java.util и является конкретной реализацией Dictionary.
5Properties
Properties – это подкласс Hashtable. Он используется для хранения списков значений, в которых ключ является строкой, и значение тоже является строкой.
6BitSet
Класс BitSet создает специальный тип массива, который содержит значения бит. Этот массив может увеличиваться в размерах при необходимости.

Алгоритмы Collection

Структура коллекций определяет несколько алгоритмов, которые могут применяться к коллекциям и картам. Эти алгоритмы определяются как статические методы в классе Collections.

Некоторые из методов могут генерировать ClassCastException, которое возникает при попытке сравнить несовместимые типы или UnsupportedOperationException, которое возникает, когда предпринимается попытка изменить немодифицируемую коллекцию.

Коллекции определяют три статические переменные: EMPTY_SET, EMPTY_LIST и EMPTY_MAP. Все неизменны.

Как использовать итератор коллекции в Java?

Вы будете часто хотеть циклически перемещаться по элементам в коллекции. Например, вы захотите отобразить каждый элемент.

Легчайший способ это сделать – использовать итератор, который является объектом, который реализует интерфейс Iterator или ListIterator.

Iterator позволяет вам перемещаться по коллекции, получать или удалять элементы. ListIterator расширяет Iterator, чтобы обеспечить двунаправленный обход списка и модификацию элементов.

Метод Iterator и описание
1Использование Iterator в Java
Вот список всех методов с примерами, предоставляемыми интерфейсами Iterator и ListIterator.

Как использовать компаратор?

И TreeSet, и TreeMap хранят элементы в отсортированном порядке. Однако, именно компаратор определяет, что такое отсортированный порядок.

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

Метод Comparator и описание
1Использование Comparator в Java
Вот список всех методов с примерами, предоставляемыми интерфейсом Comparator.

Итог

Структура коллекций Java даёт программисту доступ к предварительно упакованным структурам данных, а также к алгоритмам для их управления.

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

Классы и интерфейсы структуры коллекций находятся в java.util.

Источник: Java — Collections Framework.

Класс

Collections в Java — GeeksforGeeks

Класс Collections — один из служебных классов в Java Collections Framework. Пакет java.util содержит класс Collections. Класс Collections в основном используется со статическими методами, которые работают с коллекциями или возвращают коллекцию. Все методы этого класса вызывают исключение NullPointerException , если коллекция или объект, переданный методам, имеет значение null.

Класс коллекции в основном содержит 3 поля, перечисленных ниже, которые можно использовать для возврата неизменяемых сущностей.

Теперь давайте обсудим методы, которые присутствуют внутри этого класса, чтобы мы могли использовать эти встроенные функции позже в нашей программе. Ниже перечислены методы в табличном формате, как показано ниже:

9002 7

Методы

Описание

addAll(Collection c, T… elements) Используется для вставки указанных элементов коллекции в указанную коллекцию.
asLifoQueue​(Deque deque) Этот метод возвращает представление Deque как очереди «последний вошел – первый вышел» (Lifo).
binarySearch(List list, ключ T) Этот метод ищет ключ, используя двоичный поиск в указанном списке.
binarySearch​(List list, T key, Comparator c) Этот метод ищет в указанном списке указанный объект, используя алгоритм двоичного поиска.
checkedCollection​(Collection c, тип Class) Этот метод возвращает динамически безопасное представление указанной коллекции.
checkedList​(список List, тип Class) Этот метод возвращает динамически типизированное представление указанного списка.
checkedMap​(Map m, Class keyType, Class valueType) Этот метод возвращает динамически типобезопасное представление указанной карты.
checkedNavigableMap​(NavigableMap m, Class keyType, Class valueType) Этот метод возвращает динамически типобезопасное представление указанной навигационной карты.
checkedNavigableSet​(NavigableSet s, тип Class) Этот метод возвращает динамически типизированное представление указанного навигационного набора.
checkedQueue​(очередь Queue, тип Class) Этот метод возвращает динамически безопасное представление указанной очереди.
 checkedSet​(Set s, Class type) Этот метод возвращает динамически безопасное представление указанного набора.
checkedSortedMap​(SortedMap m, Class keyType, Class valueType) Этот метод возвращает динамически типобезопасное представление указанной отсортированной карты.
checkedSortedSet​(SortedSet s, тип Class) Этот метод возвращает динамически типобезопасное представление указанного отсортированного набора.
copy​(List dest, List src) Этот метод копирует все элементы из одного списка в другой.
disjoint​(Collection c1, Collection c2) Этот метод возвращает значение true, если две указанные коллекции не имеют общих элементов.
emptyEnumeration() Этот метод возвращает перечисление, не имеющее элементов.
пустой итератор() Этот метод возвращает итератор без элементов.
 emptyList() Этот метод возвращает пустой список (неизменяемый).
emptyListIterator() Этот метод возвращает итератор списка, который не имеет элементов.
emptyMap() Этот метод возвращает пустую карту (неизменяемую).
emptyNavigableMap() Этот метод возвращает пустую навигационную карту (неизменяемую).
emptyNavigableSet() Этот метод возвращает пустой навигационный набор (неизменяемый).
emptySet() Этот метод возвращает пустой набор (неизменный).
emptySortedMap() Этот метод возвращает пустую отсортированную карту (неизменяемую).
emptySortedSet() Этот метод возвращает пустой отсортированный набор (неизменяемый).
перечисление​(Collection c) Этот метод возвращает перечисление по указанной коллекции.
fill​(List list, T obj) Этот метод заменяет все элементы указанного списка указанным элементом.
частота​(Collection c, Object o) Этот метод возвращает количество элементов в указанной коллекции, равное указанному объекту.
indexOfSubList​(List source, List target) Этот метод возвращает начальную позицию первого вхождения указанного целевого списка в указанном исходном списке или -1, если такого нет. вхождение.
lastIndexOfSubList​(List source, List target) Этот метод возвращает начальную позицию последнего вхождения указанного целевого списка в указанном исходном списке или -1, если такого нет. вхождение.
list​(Enumeration e) Этот метод возвращает список массивов, содержащий элементы, возвращаемые указанным перечислением, в том порядке, в котором они возвращаются перечислением.
max​(Collection coll) Этот метод возвращает максимальный элемент данной коллекции в соответствии с естественным порядком ее элементов.
max​(Collection coll, Comparator comp) Этот метод возвращает максимальный элемент данной коллекции в соответствии с порядком, заданным указанным компаратором.
min​(Collection coll) Этот метод возвращает минимальный элемент данной коллекции в соответствии с естественным порядком ее элементов.
min​(Collection coll, Comparator comp) Этот метод возвращает минимальный элемент данной коллекции в соответствии с порядком, заданным указанным компаратором.
nCopies​(int n, To) Этот метод возвращает неизменяемый список, состоящий из n копий указанного объекта.
newSetFromMap​(Map карта) Этот метод возвращает набор, поддерживаемый указанной картой.
replaceAll​(List list, T oldVal, T newVal) Этот метод заменяет все вхождения одного указанного значения в списке другим.
reverse​(List list) Этот метод изменяет порядок элементов в указанном списке на обратный
reverseOrder() коллекция объектов, реализующих интерфейс Comparable.
 reverseOrder​(Comparator cmp) Этот метод возвращает компаратор, который устанавливает обратный порядок указанного компаратора.
rotate​(List list, int Distance) Этот метод поворачивает элементы в указанном списке на указанное расстояние.
перемешивание​(Список список) Этот метод случайным образом переставляет указанный список, используя источник случайности по умолчанию.
перемешивание​(List list, Random rnd) Этот метод случайным образом переставляет указанный список, используя указанный источник случайности.
singletonMap (ключ K, значение V) Этот метод возвращает неизменяемую карту, сопоставляя только указанный ключ с указанным значением.
singleton​(To) Этот метод возвращает неизменяемый набор, содержащий только указанный объект.
singletonList​(To) Этот метод возвращает неизменяемый список, содержащий только указанный объект.
sort​(List list) Этот метод сортирует указанный список в возрастающем порядке в соответствии с естественным порядком его элементов.
sort​(List list, Comparator c) Этот метод сортирует указанный список в соответствии с порядком, заданным указанным компаратором.
swap​(List list, int i, int j) Этот метод меняет местами элементы в указанных позициях в указанном списке.
synchronizedCollection​(Collection c) Этот метод возвращает синхронизированную (потокобезопасную) коллекцию, поддерживаемую указанной коллекцией.
synchronizedList​(список List) Этот метод возвращает синхронизированный (потокобезопасный) список, поддерживаемый указанным списком.
synchronizedMap​(Map m) Этот метод возвращает синхронизированную (потокобезопасную) карту, поддерживаемую указанной картой.
synchronizedNavigableMap​(NavigableMap m) Этот метод возвращает синхронизированную (потокобезопасную) навигационную карту, поддерживаемую указанной навигационной картой.
synchronizedNavigableSet​(NavigableSet s) Этот метод возвращает синхронизированный (потокобезопасный) навигационный набор, поддерживаемый указанным навигационным набором.
 synchronizedSet​(Set s) Этот метод возвращает синхронизированный (потокобезопасный) набор, поддерживаемый указанным набором.
synchronizedSortedMap​(SortedMap m) Этот метод возвращает синхронизированную (потокобезопасную) отсортированную карту, поддерживаемую указанной отсортированной картой.
synchronizedSortedSet​(SortedSet s) Этот метод возвращает синхронизированный (потокобезопасный) отсортированный набор, поддерживаемый указанным отсортированным набором.
немодифицируемая коллекция (Collection c) Этот метод возвращает неизменяемое представление указанной коллекции.
немодифицируемый список (List list) Этот метод возвращает неизменяемое представление указанного списка.
немодифицируемыйNavigableMap​(NavigableMap m) Этот метод возвращает неизменяемый вид указанной навигационной карты.
неизменяемыйNavigableSet​(NavigableSet s) Этот метод возвращает неизменяемое представление указанного навигационного набора.
немодифицируемый набор​(Set s) Этот метод возвращает неизменяемое представление указанного набора.
немодифицируемыйSortedMap​(SortedMap m) Этот метод возвращает неизменяемый вид указанной отсортированной карты.
немодифицируемыйSortedSet​(SortedSet s) Этот метод возвращает неизменяемый вид указанного отсортированного набора.

Теперь мы закончили с перечислением всех методов, так что теперь у нас есть слабый намек на понимание того, насколько важны эти методы, когда мы думаем о глобальной перспективе программирования. Важные и часто используемые методы при написании оптимизированного кода, поскольку вы так или иначе увидите эти методы почти в каждом коде, оптимизированном для Java, из-за беспорядочного использования класса Collections в java. Так что здесь, скорее, чем в любом другом классе, мы будем не только реализовывать метод, но и обсуждать операции, которые можно выполнить, чтобы можно было иметь концептуальную ясность и сильное командование при его реализации. Операции, которые мы будем обсуждать, следующие:

Метод addAll() класса java.util.Collections используется для добавления всех указанных элементов в указанную коллекцию. Добавляемые элементы могут быть указаны индивидуально или в виде массива.

java.util.Collections.sort() используется для сортировки элементов, присутствующих в указанном списке коллекции, в порядке возрастания. java.util.Collections.reverseOrder() используется для сортировки в порядке убывания.

Метод java.util.Collections.binarySearch() возвращает позицию объекта в отсортированном списке. Для использования этого метода список должен быть отсортирован по возрастанию, иначе результат, возвращаемый методом, будет неправильным. Если элемент существует в списке, метод вернет позицию элемента в отсортированном списке, в противном случае результатом, возвращаемым методом, будет число 9.0003 — (точка вставки, где элемент должен был присутствовать, если он существует)-1) .

Метод copy() класса java. util.Collections используется для копирования всех элементов из одного списка в другой. После операции индекс каждого скопированного элемента в целевом списке будет идентичен его индексу в исходном списке. Список назначения должен быть не меньше исходного списка. Если он длиннее, остальные элементы в списке назначения не затрагиваются.

java.util.Collections.disjoint() используется для проверки того, являются ли две указанные коллекции непересекающимися. Более формально две коллекции не пересекаются, если они не имеют общих элементов. Он возвращает true, если две коллекции не имеют общего элемента.

Как правильно выбрать класс коллекции в Java? Пример списка, набора, карты и очереди

Платформа сбора данных Java предлагает реализацию различных данных. структура, такая как массив, список, набор, карта, очередь, дерево и т. д., и выбор действительно зависит от ситуации и свойств различных данных состав. Например, если вам нужен быстрый поиск по индексу, вы можешь использовать ArrayList и если вы хотите хранить пары ключ-значение, вам следует рассмотреть возможность использования хэша структура данных таблицы и несколько реализаций хеш-таблицы структура данных в Java, например HashMap, Хеш-таблица, LinkedHashMap, Карта дерева и ConcurrentHashMap.

Теперь, какой из них вы выберете? Если вы не знаете или не знаете, не волнуйтесь, я дам вам набор правил и вариантов использования, которые помогут вам выбрать правильный тип коллекции в Java в зависимости от сценария.

Опять же, если вам нужно простое хранилище пар ключ-значение, тогда вы можете использовать HashMap, но если вас беспокоит потокобезопасность, тогда у вас есть еще три варианта: синхронизированный HashMap, Hashtable и ConcurrentHashMap, последний лучше из-за большей масштабируемости.

То же, если вы беспокоитесь о заказе, потому что карта не гарантирует порядок, который вы можете использовать LinkedHashMap или TreeMap, LinkedHashMap обеспечивает гарантию порядка вставки, так как сохраняет сопоставления в том порядке, в котором они вставлены, в то время как TreeMap является отсортированной картой, которая сохраняет сопоставление в отсортированном порядок, определяемый их компаратор или Сопоставимые выполнение.

Итак, все сводится к вашим требованиям и вашему пониманию различных Классы коллекций в Java. В этой статье я дам вам краткое и сравнительный обзор основных интерфейсов из коллекции Java рамки и выделить их уникальные свойства, которые помогут вам выбрать правильный класс Collection для работы.

Платформа Java Collection — один из самых важных API в JDK. Это определяет реализацию различных структур данных на языке Java что делает очень важным для Java-разработчиков изучение и понимать.

Вы можете думать о его популярности с точки зрения того, что Java почти не существует. написанное приложение, в котором не использовались классы из коллекции Java рамки.

Все важные классы, которые вы использовали или слышали как список массивов, хэшкарта, Вектор, LinkedList, Deque, BlockingQueue — все они основаны на платформе сбора данных Java.

Чтобы эффективно использовать платформу Java Collection и правильно выбрать тип коллекции для работы, вам нужно знать 4 основных интерфейса, таких как список, набор, карта и очередь.

  • Список представляет собой упорядоченную коллекцию , допускающую дублирование .
  • Набор — это неупорядоченная коллекция , не допускающая дублирования
    .
  • Карта Map связывает один объект с другим и обеспечивает реализацию структура данных хеш-таблицы. Никакого порядка это не гарантирует.
  • A Queue — это интерфейс, обеспечивающий FIFO-упорядочение элементов.

И вот краткое руководство о том, как выбрать правильную коллекцию для работы. в Java:


1. List 

Интерфейс List имеет несколько реализаций, но две из них являются наиболее важными. являются ArrayList и LinkedList. Первые представляют структуру данных массива, а позже представляет структуру данных связанного списка.

Так же как массив подходит для быстрого поиска, МассивСписок следует использовать, если вам нужен быстрый поиск и ваши данные могут содержать или не содержать дубликаты.

LinkedList лучше подходит для частого добавления и удаления, но обеспечивает медленную работу. доступ, следовательно, если вы обрабатываете данные и часто добавляете и удаляете из списка, то связный список может быть хорошим выбором. Если вы хотите знать подробнее о них, я предлагаю вам прочитать, когда ArrayList и LinkedList в Java.


2. Комплект

Интерфейс Set имеет три основные реализации. хэшсет, Набор деревьев и LinkedHashSet. HashSet основан на Hashtable, но не связывает один объект с другой, он просто сохраняет их со значениями по умолчанию. Если вам нужен универсальный установлен для хранения уникальных значений, вы можете использовать HashSet.

Линкедхэшсет обеспечивает упорядоченность и уникальность и должна использоваться для поддержания уникальности элементы в том порядке, в котором они вставлены в набор.

TreeSet упорядочивает элементы в порядке, определенном их компаратором или Сопоставимы, и если вам нужно отсортировать элементы, это набор, который вы можете использовать.

Вот хорошая табличная сводка различий между HashSet, TreeSet и LinkedHashSet, а также другими различными типами Установите классы в Java для разных параметров, например. структура данных, сортировка, итератор и как они обрабатывают нулевой ввод.


3. Карта

Интерфейс карты также поставляется с несколькими реализациями, например. HashMap, Hashtable и LinkedHashMap.

HashMap является вашим универсальным назначением, если вам нужно связать один объект с другой напр. id для имени, то вы можете использовать это. Он обеспечивает быстрый поиск, если вы знаю ключ, но это не гарантирует никакого порядка.

LinkedHashMap решает эту проблему, предоставляя гарантию заказа потому что он хранит все сопоставления в том порядке, в котором они были вставлены в карту.

Hashtable — это синхронизированная версия HashMap, это устаревший класс и лучше избегать в пользу более масштабируемых альтернатив, таких как ConcurrentHashMap.

Существует также TreeMap, который, как и TreeSet, хранит сопоставления в отсортированном порядке. определяется их реализациями Comparator и Comparable. Вот хорошая таблица различий между HashMap, LinkedHashMap и TreeMap в Java:


4. Очередь

Интерфейс Queue обеспечивает структуру FIFO, например, First In First Out. есть пара реализаций очередей, доступных в JDK, например. PriorityQueue, BlockingQueue, и связанный список.

Вы можете использовать PriorityQueue для обработки элементов с приоритетом, например. всегда обработка элемента с высоким приоритетом в первую очередь. Это удобно для планирования работы и других вещи, которые обрабатываются в приоритете.

BlockingQueue используется для обеспечения безопасности потоков и рабочего процесса. Вы можете использовать его для реализовать шаблон производитель-потребитель, например, когда один поток может добавлять объекты в очередь, и другие могут его использовать.

Это все о , как выбрать правильный тип коллекции в Java . Как В первом абзаце я рассказал вам о структуре Java Collection. предоставляет реализации нескольких структур данных, таких как хеш-таблицы, список, набор, приоритетная очередь, стек, очередь, дека и т. д. Теперь самое главное Вопрос в том, как вы выбираете коллекцию? Ну, это полностью зависит от ваша потребность.

Это всего лишь пример, в этой статье мы рассмотрим другие важные классы Collection, чтобы научиться выбирать правильный тип Сбор для работы.

Другое Учебное пособие по коллекциям Java и вопросы для интервью

  • Разница между HashSet, TreeSet и LinkedHashSet в Java? (отвечать)
  • 50 Java-программ из интервью по программированию (список)
  • Разница между HashMap и ArrayList в Java? (отвечать)
  • 10 вопросов на собеседовании по Java Garbage Collection (список)
  • В чем разница между HashSet и ArrayList в Java? (ответ)
  • 21 вопрос для собеседования по модификатору Java Final (список)
  • В чем разница между ArrayList и LinkedList в Java? (ответ)
  • 21 вопрос на собеседовании по наследованию Java с ответами (список)
  • 5 различий между HashMap и Hashtable в Java? (ответ)
  • 10 вопросов для интервью на основе даты, времени и календаря с ответами (список)
  • Как использовать NavigableMap в Java 6? [пример]
  • 10 Пример ConcurrentHashMap в Java? (одновременная хеш-карта)
  • Как использовать BlockingQueue в программе Java? [пример]
  • 25 вопросов интервью с Java Collection с ответами (коллекции)
  • 5 лучших курсов для углубленного изучения Java Collections Framework (курсы)

Спасибо, что прочитали эту статью.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *