Коллекции в Java — набор взаимосвязанных классов, реализующих структуры данных. Они позволяют создавать структуры, подобные массивам, но с расширенным функционалом.
Основные интерфейсы и классы
В Java множество классов для работы с коллекциями. Основные интерфейсы — Collection и Map. Интерфейс Map создаёт структуры «ключ-значение», в отличие от массивов, где индекс всегда число (0, 1, 2 и т.д.). В Map ключом может быть любой объект, не только число.
Рассмотрим классы ArrayList и LinkedList. Другие классы работают аналогично, но отличаются производительностью и возможностями.
ArrayList: создание и работа с элементами
Для работы с классами создаются объекты. Ранее создавались объекты класса Scanner, теперь — объекты ArrayList и LinkedList.
Начнём с ArrayList. Класс ArrayList импортируется при первом использовании:
import java.util.ArrayList;
При создании объекта ArrayList указывается тип хранимых данных в угловых скобках < >. Можно использовать любые типы данных. Для примитивных типов (int, float, byte) используются их оболочки (Integer, Float, Byte).
Пример создания ArrayList для хранения данных типа Byte:
ArrayList<Byte> myBytes = new ArrayList<>();
В круглых скобках можно указать начальный размер списка (необязательно). ArrayList — динамический массив, его размер автоматически изменяется. Динамические массивы удобны, но могут быть менее эффективны, чем обычные массивы.
Добавление, изменение и удаление элементов
После создания объекта ArrayList, можно добавлять, удалять и изменять элементы.
Добавление элементов: метод add():
myBytes.add((byte) 5);
myBytes.add((byte) 50);
Обход элементов: цикл for-each:
for (Byte element : myBytes) {
System.out.println(element);
}
Изменение элемента: метод set():
myBytes.set(1, (byte) 30); // Заменяем второй элемент (индекс 1) на 30
Получение размера коллекции: метод size():
int size = myBytes.size();
Получение элемента по индексу: метод get():
Byte element = myBytes.get(1); // Получаем второй элемент
System.out.println(element);
Удаление элемента по индексу: метод remove():
myBytes.remove(0); // Удаляем первый элемент
Удаление всех элементов: метод clear():
myBytes.clear();
LinkedList: создание и работа с элементами
Класс LinkedList также используется для создания динамических списков. Создание аналогично ArrayList:
import java.util.LinkedList;
LinkedList<Float> myFloats = new LinkedList<>();
Основное различие между ArrayList и LinkedList — способ хранения данных. LinkedList связывает элементы, что делает операции добавления и удаления эффективнее, чем в ArrayList. LinkedList предпочтительнее, если часто добавляются или удаляются элементы. ArrayList быстрее, если список преимущественно используется для чтения данных.
Добавление, удаление и доступ к элементам в LinkedList осуществляется с помощью тех же методов (add(), remove(), get(), size(), clear()), что и в ArrayList.
myFloats.add(5.6f);
myFloats.add(10.2f);
for (Float element : myFloats) {
System.out.println(element);
}
Коллекции в Java — мощный инструмент для работы со структурами данных. Выбор между ArrayList и LinkedList зависит от задачи. ArrayList подходит для частого доступа к элементам, LinkedList — для частых добавлений и удалений. Важно учитывать различия в производительности и выбирать подходящий класс. При возможности, лучше использовать обычные массивы.