Коллекция представляет собой группу объектов, известных как ее элементы. Давайте узнаем, как работать с коллекцией на Java.

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

Я написал эту статью, потому что в интервью меня спросили о разнице между List и Set. После собеседования я понял, что мало знаю о Collection API и о том, как он работает внутри компании. Это заставляет меня пересмотреть свои знания и написать эту статью.

Есть некоторые из тех, с которыми вы, возможно, работали, - это List, Set, ArrayList, HashSet. Помимо этих классов, в API коллекции есть еще много классов, которые лучше всего подходят для многих других ситуаций, таких как синхронная, упорядоченная, неизменяемая и т. Д. Давайте поговорим об этом.

Иерархия коллекции

Как мы видели на рисунке выше, Collection имеет три субинтерфейса, указывающих на три основных типа коллекции в Java.

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

Set аналогично списку, но не допускает дублирования значений, поэтому не содержит пары элементов, равных e1. Набор допускает null значение, поэтому в наборе может быть не более одного нулевого значения. Некоторые из конкретных классов, производных от интерфейса Set, не сохраняют порядок элементов таким же, как при вставке.

Интерфейс Queue просто реализует структуру данных первым пришел - первым обслужен.

Список

В Java Collection API интерфейс List имеет три конкретных класса, показанных на рисунке выше. Чаще всего используется ArrayList. ArrayList не является потокобезопасным. Чтобы быть поточно-ориентированным, используйте вместо него Vector.

LinkedList использует двусвязный список. Вставка элемента как посередине, так и спереди или сзади стоит постоянного времени. В отличие от ArrayList, ArrayList требует времени лайнера для вставки элемента спереди или посередине.

Сколько стоит доступ к элементу? ArrayList дает постоянное время для доступа к элементам в любой позиции, но LinkedList использует линейное время для среднего элемента. Для передних и задних элементов LinkedList требует постоянного времени, как ArrayList.

Более подробный:

Установленный

Основные конкретные реализации интерфейса Set:

  • Обычно используется HashSet, он поддерживается HashMap, каждое значение, добавляемое в HashSet, похоже на добавление нового ключа в HashMap. HashSet не сохраняет порядок элементов с тем же порядком вставки и даже для следующего обхода.
  • TreeSet поддерживается TreeMap, каждое значение, добавляемое в TreeSet, добавляется как ключ поддерживаемого TreeMap. Элементы TreeSet упорядочены в их естественном порядке. TreeSet не допускает нулевых значений.
  • LinkedHashSet похож на HashSet, но сохраняет элементы в порядке вставки.
  • EnumSet - это набор значений перечисления. Каждое значение EnumSet должно быть объектом перечисления.

Дополнительный ресурс: https://web.csulb.edu/~pnguyen/cecs277/lecnotes/hashtree.pdf

Очередь

Очередь в соответствии со структурой данных "первым пришел - первым обслужен". В API коллекции java есть два конкретных реализованных класса Queue. Это LinkedList и PriorityQueue.

Пример:

Мощные служебные классы

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

java.util.Arrays имеет метод с именем asList, который легко преобразует массив в список.

java.util.Collections

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

// Create unmodifiable collection from a collection
Collections.unmodifiableList(list);
Collections.unmodifiableSet(set);
Collections.singleton(element);
Collections.singletonList(element);
// Create synchronized collection
Collections.synchronizedList(list);
Collections.synchronizedSet(set);

Для получения дополнительной информации: https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html

Резюме

Прочитав этот раздел, вы познакомитесь с тремя подтипами интерфейса Коллекции (Список, Набор, Очередь).

Интерфейс List имеет три конкретных класса: ArrayList, Vector, LinkedList.

В Set есть четыре основных реализованных класса: HashSet, LinkedHashSet, TreeSet, EnumSet.

LinkedList и PriorityQueue выводятся из интерфейса очереди.

Мы также представляем java.util.Arrays и java.util.Collections, которые являются основными встроенными служебными классами для работы с коллекцией.

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

Призыв к действию

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

Https://tranthanhdeveloper.com/membership