Списки
Сегодня познакомимся с более сложной структурой данных в программировании - списки. По сути своей списки похоже на массивы: они упорядочены и хранят в себе однотипные элементы. Но, сама структура хранения данных и возможные действия сильно отличаются от массивов. Например, В любой момент времени в список можно добавить элемент, удалить элемент из списка и т.п. А чем отличается хранение? Всё очень просто: Каждый элемент списка хранит в себе ссылку на следующий элемент. Но это совсем не означает, что эти элементы лежат друг за другом, как в массиве. Поэтому эта структура данных работает медленнее массива. Однако, в промышленном программировании подобная скорость по сути не имеет значения.
Теперь давайте разберёмся, почему элементы в список так легко добавлять. На самом деле нет ничего сложного. Просто при добавлении элемента на любую позицию меняется ссылка у его соседа сзади (теперь предыдущий элемент ссылается на новый, а новый - на следующий).
Как вы понимаете, мы можем создавать списки только с ссылочными типами данных, так как список ведёт работу с ссылкам на объект.
Пример создания и вывода в строку.
Для создания списка нам понадобится тип данных ArrayList. Его придётся импортировать. Например, создание списка может выглядеть так:
import java.util.ArrayList;
class Example {
public static void main(String[] args){
ArrayList<String> list = new ArrayList<>();
}
}
Вывести список строк, как и массив строк, очень легко с помощью метода join. Если у вас есть список list, то сделать это можно так:
System.out.println(String.join(" ", list));
Этот простой код выведет ваш список через пробел.
Методы списков
Основные методы, которые могут понадобится:
Методы
Описание
sp.add(index, obj)
добавляет в список по индексу index объект obj
sp.addAll(index, col)
добавляет в список по индексу index все элементы списка col. Если в результате добавления список был изменен, то возвращается true, иначе возвращается false
sp.get(index)
возвращает объект из списка по индексу index
sp.set(index, obj)
присваивает значение объекта obj элементу, который находится по индексу index
sp.indexOf(obj)
возвращает индекс первого вхождения объекта obj в список. Если объект не найден, то возвращается -1
sp.lastIndexOf(obj)
возвращает индекс последнего вхождения объекта obj в список. Если объект не найден, то возвращается -1
sp.remove(index)
удаляет объект из списка по индексу index, возвращая при этом удаленный объект
sp.toArray()
превращает список в массив
sp.contains(obj)
проверяет, есть ли элемент obj в списке sp. Возвращает значение boolean
sp.size()
находит размер списка (количество элементов)
sp.subList( start, end)
получает набор элементов, которые находятся в списке между индексами start и end
Модификация цикла for
В силу того, что циклом for часто перебирают элементы какой-либо структуры данных, появилась его модификация, известная как for .. in. Правда в Java ключевое слово in не пишется. Давайте посмотрим на пример реализации.
Общий синтаксис выглядит так:
Пусть E - какой-то тип данных,
mas - коллекция, котороая содержит в себе тип данных E
for (E <имя переменной>: mas){
//тело цикла
}
Пример конкретной реализации:
class Example {
public static void main(String[] args){
int[] mas = {1, 6, 4, 3, 9, 4, 5, 2, 1};
for(int r: mas){
System.out.println(r);
}
}
}
Как примитивные, только ссылочные
Как мы уже обсуждали, существуют 8 примитивных типов данных, но вот незадача! Большая часть коллекций, таких как список работает только с ссылочными типами данных. То есть, мы не можем создать список с банальным типом данных int. Как же быть? Ответ прост. Для подобных случаев были созданы ссылочные классы, которые дублируют примитивные. Они называются по сути так же, как и примитивные, только с большой буквы(Единственное - не Int, а Integer). Помните, что сравнивать значения с таким типом данных через == не получится. Придётся использовать метод equals. Поэтому создать список с типом int действительно нельзя, а вот с типом данных Integer можно!
import java.util.ArrayList;
class Example {
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<>();
list.add(5);
}
}
Свои вопросы можете задать в телеграмм-канале
Курс по Java - разработке бесплатно(9 урок)