Рубрики
Без рубрики

Что такое коллекции Java? Начните работу с фреймворком

Коллекции используются во всех языках программирования. Это объекты, которые группируют несколько элементов int… С пометкой java, программирование, информатика, программист.

Коллекции используются во всех языках программирования. Это объекты, которые группируют несколько элементов в единое целое. До появления фреймворка коллекций программистам было трудно писать алгоритмы, которые работали бы для разных видов коллекций. Java поставляется с некоторыми классами коллекций, такими как Вектор , Стек , Хэш-таблица и Массив , но у них были свои недостатки.

В JDK 1.2 разработчики Java представили платформу коллекций, которая является важной платформой, помогающей выполнять все ваши операции с данными. Сегодня мы углубимся в эту структуру и некоторые из ее компонентов.

Вот что мы рассмотрим сегодня :

  • Что такое коллекции Java?
  • Список массивов в Java
  • Список ссылок на Java
  • Набор хэшей в Java
  • Набор деревьев на Java
  • Другие коллекции для изучения

Что такое коллекции Java?

Платформа Java Collections Framework представляет собой унифицированную архитектуру для представления коллекций и управления ими . Он содержит интерфейсы, классы их реализации и алгоритмы обработки данных, хранящихся в коллекции. Интерфейс сбора расширен другими интерфейсами , такими как Список, Набор и очередь.

Примечание : Существует также интерфейс карты, но он не реализует интерфейс коллекции, поскольку в нем хранятся пары ключ-значение, а классы, входящие в интерфейс коллекции, хранят только значения.

Различия между структурой коллекций и коллекциями :

  • Платформа коллекций – это интерфейс, а коллекции – это класс.
  • Интерфейс сбора предоставляет стандартную функциональность структур данных для Списка , Набор , и Очередь . Класс Коллекций предоставляет стандартные методы, которые можно использовать для поиска, сортировки и координации элементов коллекции.
  • Коллекции – это объекты, представляющие группу объектов (например, Вектор ), в то время как платформа коллекций может представлять коллекции и управлять ими.

Компоненты фреймворка коллекций Java

Интерфейсы

Эти интерфейсы предоставляют абстрактный тип данных для представления коллекции. Файл java.util. Коллекция является корневым интерфейсом фреймворка. Он находится на вершине иерархии фреймворка и содержит важные методы, такие как размер() , итератор() , добавить() , удалить() и очистить() .

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

Некоторые более важные интерфейсы включают:

  • Интерфейс карты: java.util. Карта
  • Установить интерфейс: java.util. Набор
  • Интерфейс Deque: java.util. Деке

Примечание : Интерфейс карты является единственным, который не наследуется от интерфейса коллекции, но включен в структуру коллекций. Все интерфейсы фреймворка находятся в пакете java.util.

Классы реализации

Фреймворк предоставляет классы реализации для коллекций. Вы можете использовать их для создания различных типов коллекций в ваших Java-программах. Некоторые из основных классов коллекций включают:

  • Список массивов
  • Связанный список
  • Приоритетная очередь
  • Хэш-карта и Набор хэшей
  • Древовидная карта и Набор деревьев

Алгоритмы

Эти алгоритмы выполняют важные функции в коллекциях, такие как сортировка списков.

Иерархия структуры коллекций выглядит следующим образом:

Список массивов в Java

ArrayList является наиболее часто используемой реализацией интерфейса списка . Некоторые из его функций включают:

  • Сохраняет элементы в порядке вставки
  • Позволяет хранить повторяющиеся элементы
  • Поддерживает нулевые элементы

Список массивов хранит данные в массиве с возможностью изменения размера . Когда вы создаете список массивов, вы создаете массив нулевого размера. Когда вставляется первый элемент, размер массива изменяется на десять. Это известно как ленивая инициализация и это экономит много памяти. Перед добавлением элемента в список массивов проверяется его вместимость. Если массив заполнен, то создается новый массив размера (n + n/2 + 1). Затем элементы из старого массива копируются в новый.

Существует три способа создания списка массивов в Java :

1. Конструктор без аргументов

Этот конструктор не принимает никаких аргументов и создаст список нулевого размера.

List list = newArrayList();

2. Конструктор, который принимает начальную мощность

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

List list = newArrayList(50);

3. Существующая Коллекция

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

List list = newArrayList(oldList);

Вот пример списка массивов, который вы могли бы выполнить на Java:

import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
    public static void main(String args[]) {
        List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list);
        System.out.println("The element at index two is " + list.get(1));
        System.out.println("The size of the List is " + list.size());
    }
}

Вывод :

[1, 2, 3] Элемент с индексом два равен 2 Размер списка равен 3

Есть много вещей, которые вы можете сделать с помощью списка массивов, в том числе:

  • Обновите элемент с помощью метода set(индекс int, E e)
  • Проверьте, присутствует ли элемент, используя содержит(объект o) способ
  • Удалите все элементы в данной коллекции с помощью removeAll(Коллекция > c) метод
  • Замените все элементы с помощью replaceAll(оператор UnaryOperator)
  • И т.д.

Список ссылок на Java

Класс LinkedList реализует интерфейсы List и Deque . Некоторые из его функций включают:

  • Сохраняет элементы в порядке вставки
  • Поддерживает повторяющиеся элементы
  • Допускает любое количество нулевых элементов

Связанный список также имеет статический внутренний класс под названием Узел , который содержит три поля:

  1. элемент : содержит значение текущего элемента
  2. следующий : содержит указатель на следующий элемент
  3. предыдущий : содержит указатель на предыдущий элемент]

Когда элемент добавляется в Связанный список, он создает новый Узел экземпляр . Поля “Предыдущий” и “следующий” устанавливаются в зависимости от того, где добавлен новый узел.

Существует два способа создания списка ссылок в Java :

1. Конструктор без аргументов

Этот конструктор не принимает никаких аргументов и создаст список нулевого размера.

List list = new LinkedList();

2. Существующая Коллекция

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

List list = new LinkedList(oldList);

Вот пример связанного списка, который вы могли бы выполнить на Java:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LinkedListDemo {
    public static void main(String args[]) {
        LinkedList linkedList = new LinkedList<>();
        linkedList.add(1); // Adds 1 to the list.
        linkedList.add(2); // Adds 2 to the end of the list.
        linkedList.addLast(3); // Adds 3 to the end of the list.
        System.out.println(linkedList);
        linkedList.addFirst(10); // Adds 10 to the start of the list.
        System.out.println(linkedList);
        linkedList.add(2, 20); // Adds 20 to second position in the list.
        System.out.println(linkedList);
        List list = new ArrayList<>();
        list.add(101);
        list.add(102);
        list.add(103);
        linkedList.addAll(3, list); // Adds the collection of elements at third position in the list.
        System.out.println(linkedList);
    }
}

Вывод :

[1, 2, 3] [10, 1, 2, 3] [10, 1, 20, 2, 3] [10, 1, 20, 101, 102, 103, 2, 3]

Еще несколько вещей, которые вы можете сделать с помощью LinkedList:

  • Извлеките элемент по определенному индексу с помощью get(индекс int) способ
  • Удалите последний элемент с помощью удалить последний() метод
  • Сортировка связанного списка с помощью сортировки() метод
  • И т.д.

Набор хэшей в Java

HashSet – это класс в пакете java.util , который реализует интерфейс Set . Некоторые из функций хэш-набора включают:

  • Не допускает дублирования элементов
  • Допускается только один нулевой элемент
  • Элементы вставляются в случайном порядке
  • Внутренняя поддержка с помощью хэш-карты

Существует четыре способа создания хэш-набора в Java :

1. Конструктор без аргументов

Это создаст хэш-набор с начальной емкостью 16 и коэффициентом загрузки 0,75.

Set set= new HashSet<>();

2. Конструктор, который принимает начальную мощность

Если вы знаете, что ваш хэш-набор будет содержать более 16 элементов, вы можете установить более высокую начальную емкость, чтобы уменьшить необходимость изменения размера. Он будет использовать коэффициент загрузки по умолчанию 0,75.

3. Конструктор, учитывающий начальную пропускную способность и коэффициент загрузки

Вы также можете указать начальный коэффициент загрузки вместе с начальной пропускной способностью.

4. Конструктор, который принимает другой набор в качестве параметра

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

Вот пример набора хэшей, который вы могли бы выполнить на Java:

import java.util.HashSet;
import java.util.Set;
public class HashSetDemo {
    public static void main(String args[]) {
        Set set = new HashSet<>();
        System.out.println("Inserting 17 in the HashSet:  " + set.add(17));
        System.out.println("Inserting 34 in the HashSet:  " + set.add(34));
        System.out.println("Inserting 17 in the HashSet:  " + set.add(17));
        System.out.println(set);
    }
}

Вывод :

Вставка 17 в набор хэшей: верно Вставка 34 в набор хэшей: верно, вставляя 17 в хэш-набор: ложь [17, 34]

Приведенный выше код продемонстрировал демонстрацию метода add(E e) , который вставляет элемент в хэш-набор. Если вставленный элемент еще не был в хэш-наборе, метод возвращал true . Если элемент уже был в хэш-наборе, метод возвращал false .

Есть еще кое-что, что вы можете сделать с хэш-наборами, например:

  • Удалить элементы с помощью удалить(объект o) способ
  • Проверьте, пуст ли набор хэшей, используя метод isEmpty()
  • Извлеките элемент из хэш-набора с помощью содержит() метод
  • И т.д.

Набор деревьев на Java

Класс TreeSet реализует интерфейс Set , который использует дерево для хранения. Некоторые из функций включают:

  • Не допускает дублирования элементов
  • Не допускает нулевых элементов
  • Быстрый доступ и время поиска
  • Элементы, хранящиеся в порядке возрастания

Иерархия древовидных наборов выглядит следующим образом:

Чем набор деревьев отличается от набора хэшей?

  • HashSet допускает один нулевой элемент, в то время как TreeSet не допускает никаких
  • Элементы сортируются случайным образом в хэш-наборе, в то время как в наборе деревьев они сортируются по порядку
  • Хэш-набор быстрее для таких операций, как добавление, удаление, содержит, размер и т.д.

Существует четыре способа создания древовидного набора в Java :

1. Конструктор без аргументов

Set set = new TreeSet<>();

2. Конструктор с компаратором в качестве аргумента

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

3. Конструктор с аргументом типа коллекции

Вы можете создать набор деревьев из другой коллекции. Элементы будут храниться в порядке возрастания.

4. Конструктор с аргументом типа SortedSet

Этот конструктор действует как конструктор копирования и создает новый отсортированный набор с теми же элементами и в том же порядке предоставленного отсортированного набора.

Вот пример набора деревьев, который вы могли бы выполнить на Java:

import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo {
    public static void main(String args[]) {
        TreeSet set = new TreeSet<>();
        set.add(21);
        set.add(32);
        set.add(44);
        set.add(11);
        set.add(54);
        System.out.println("TreeSet elements in ascending order " + set);
        // This TreeSet will store the elements in reverse order.
        TreeSet reverseSet = new TreeSet<>(Comparator.reverseOrder());
        reverseSet.add(21);
        reverseSet.add(32);
        reverseSet.add(44);
        reverseSet.add(11);
        reverseSet.add(54);
        System.out.println("TreeSet elements in descending order " + reverseSet);
    }
}

Вывод :

Элементы древовидного набора в порядке возрастания [11, 21, 32, 44, 54] Элементы древовидного набора в порядке убывания [54, 44, 32, 21, 11]

Есть еще много вещей, которые вы можете сделать с помощью TreeSet, таких как:

  • Извлекать элементы, превышающие заданный элемент, с помощью хвостового набора(E из элемента) способ
  • Извлеките подмножество элементов, используя Подмножество(E из элемента, E в элемент) метод
  • И т.д.

Другие коллекции для изучения

Поздравляем вас с первыми шагами в области Java Collections Framework! Сбор данных – одна из наиболее важных тем в программировании на Java, и эта важная структура поможет вам выполнить все ваши операции с данными. Теперь вы готовы глубже погрузиться в структуру коллекций Java и узнать больше о таких темах, как:

  • LinkedHashMap и LinkedHashSet
  • Сортированная карта и сортированный набор
  • toArray()
  • hasNext()
  • И т.д.

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

Счастливого обучения!

Продолжайте читать о Java

Оригинал: “https://dev.to/educative/what-are-java-collections-get-started-with-the-framework-1j8j”