На этом шаге мы рассмотрим интерфейс List
List - это интерфейс, который наследуется от интерфейса Collection. В List были добавлены множество функций для работы со списками. Поговорим только про некоторые из них (с остальными функциями вы можете ознакомиться обратившись к документации):
В стандартной библиотеке Java есть два класса, реализующие интерфейс List. Это классы ArrayList и LinkedList. Разница между ними в том, что в первом классе реализация списка основана на массиве, а во втором на двунаправленном списке. Из-за разницы реализации возникает важный вопрос: когда лучше использовать класс ArrayList, а когда LinkedList? Чтобы вы могли ответить на данный вопрос поговорим о плюсах и минусах данных реализаций:
Приведем ниже пример использования списков.
import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * В данной программе демострируется использование двух классов * ArrayList и LinkedList. Заметим, что мы не используем строки ввида: * ArrayList<Integer> list = new ArrayList<>(). * Вместо этого мы создаем интерфейсные ссылки. Это сделано потому что часто * программистам приходится изменять программы. И для того чтобы уменьшить количество * возможных отпечаток в программе рекомендуется использовать именно * интерфейсные ссылки. * */ public class Main { /** * Максимальное количество элементов в списках * */ private static final int MAX_COUNT_ELEMENTS = 10; /** * Функция для вывода элементов в списке * @param list список элементов * */ private static <T> void printList(List<T> list) { for (int index = 0; index < list.size(); index++) { System.out.print(" " + list.get(index)); } System.out.println(); } /** * Точка входа программы * */ public static void main(String[] args) { /*Первый список*/ List<Integer> list1 = new ArrayList<>(); /*Построение списка*/ for (int index = 0; index < MAX_COUNT_ELEMENTS; index++) { list1.add(index); } /*Вывод количества элементов списка*/ System.out.println("Количество элементов в первом списке: " + list1.size()); /*Вывод содержимого списка*/ System.out.print("Элементы первого списка:"); printList(list1); /*Изменение значений 1 и 6 элемента списка*/ list1.set(0, 55); list1.set(5, 46); /*Вывод элементов списка после изменения его элементов*/ System.out.print("Элементы первого списка после изменения:"); printList(list1); /*Конструирование нового списка на основе первого списка*/ List<Integer> list2 = new LinkedList<>(list1); /*Вывод количества элементов списка*/ System.out.println("\nКоличество элементов во втором списке: " + list2.size()); /*Вывод содержимого списка*/ System.out.print("Элементы второго списка:"); printList(list2); /* Удаление 2 элемента списка. Все элементы, стоящие справа от 2 элемента сдвигаются влево на одну позицию. */ list2.remove(1); /*Удаление 6 элемента списка*/ list2.remove(5); /*Вывод элементов списка после удаления его элементов*/ System.out.print("Элементы второго списка после изменения:"); printList(list2); } }
Проект можно взять здесь
Рис. 1. Вывод программы
На следующем шаге мы рассмотрим интерфейсы Queue и Deque