Списки

Типи даних і винятки в Java

Jim White

Java Developer

Інтерфейс List

  • Інтерфейс List, підінтерфейс Collection
    • Визначає упорядковану групу об'єктів
    • Може містити дублікати
  • Кілька реалізацій List
    • Поведінка подібна
    • Реалізація визначає внутрішнє керування об'єктами
Типи даних і винятки в Java

Реалізації List

  • ArrayList — змінний за розміром, індексований (як масиви), упорядкований список об'єктів

ArrayList подібні до масивів Java з індексованими елементами

  • LinkedList — об'єкти, з'єднані посиланнями на наступний і попередній.

LinkedList — списки об'єктів, з'єднані вказівниками

  • Незалежно від реалізації, додавати, вилучати, змінювати об'єкти однаково
1 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/List.html for List types and details
Типи даних і винятки в Java

ArrayList

  • Створіть екземпляр через new і використайте дженерики для типу вмісту
  • Додайте об'єкт у кінець списку за допомогою .add(object)
  • Доступ до об'єкта — .get(index)
    • ArrayList має нульову базу індексації
  • Замінити/змінити об'єкт — .set(index, object)
  • Вилучити об'єкт — .remove(index)
  • Очистити всі об'єкти — .clear()
  • Кількість об'єктів — .size()
import java.util.ArrayList;
...
ArrayList<String> animals
  = new ArrayList<String>();

animals.add("horse"); animals.add("cow"); animals.add("horse"); // Дозволені дублікати
String c = animals.get(1); // c="cow" animals.set(1, "chicken");
// Вилучає перший horse animals.remove(0); // Вилучає всі об'єкти animals.clear();
animals.size();
Типи даних і винятки в Java

Об'єкти та примітиви

  • Використовуйте обгортки, щоб додати примітив до будь-якого об'єкта Collections Framework
  • Додані примітиви «автоматично загортаються» (autoboxed)
    • Autobox: автоматичне розміщення примітива в обгортці
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(5));
list.add(6);  // 6 автоматично загортається в Integer і додається
  • Автобоксинг працює з усіма об'єктами Collections Framework
Типи даних і винятки в Java

Гетерогенні колекції

  • Структури даних Collections Framework можуть бути гетерогенними
    • Гетерогенні = містять об'єкти різних типів
    • Використайте Object як параметризований тип
ArrayList<Object> list = new ArrayList<Object>(); // Дозволити будь-який об'єкт
list.add(new Integer(5)); // Додати Integer
list.add(6); // Додати Integer через автобоксинг
list.add("Hello"); // Додати String
Типи даних і винятки в Java

Ітерація списку

  • Використайте синтаксис «for-each» для проходу об'єктів List
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");

for (String animal : animals) { // for-each для проходу всього ArrayList
    System.out.println(animal);
}
horse
cow
chicken
Типи даних і винятки в Java

Вивід List через println

  • Вміст екземпляра List (наприклад, ArrayList) можна вивести через println
ArrayList<String> animals = new ArrayList<String>();
animals.add("horse");
animals.add("cow");
animals.add("chicken");
System.out.println(animals);  // Показати всі елементи ArrayList

ArrayList<Object> list = new ArrayList<Object>();
list.add(5);
list.add("Hello");
System.out.println(list);  // Показати всі елементи ArrayList
[horse, cow, chicken]
[5, Hello]
Типи даних і винятки в Java

LinkedList

  • LinkedList створюють так само, як екземпляри ArrayList
  • LinkedList мають ті самі методи, що й ArrayList
import java.util.LinkedList;
...
LinkedList<String> cars // Створити новий ...
  = new LinkedList<String>(); // ... LinkedList
cars.add("Ford"); // Додати об'єкт до списку
cars.add("Mercedes");
String c = cars.get(1);
cars.set(1, "Toyota"); // Замінити об'єкт
System.out.println(cars); // Показати список
cars.remove(0); // Вилучити об'єкт
cars.clear();  // Вилучити всі об'єкти
cars.size(); // Довжина списку
[Ford, Toyota]
Типи даних і винятки в Java

Додаткові методи LinkedList

  • Декілька додаткових методів
    • addFirst() — додати на початок списку
    • addLast() — додати в кінець списку
    • removeFirst() — вилучити з початку
    • removeLast() — вилучити з кінця
cars.addFirst("Fiat"); // Додати на початок
cars.addLast("BMW"); // Додати в кінець
cars.removeFirst(); // Вилучити перший об'єкт
cars.removeLast(); // Вилучити останній об'єкт
Типи даних і винятки в Java

Подібності типів Collection

  • ArrayList і LinkedList виглядають однаково
    • Інші типи з Collections Framework теж матимуть схожість
    • Так і задумано
  • Вони поділяють інтерфейс: List
    • Приклад поліморфізму («багатоформність»)
Типи даних і винятки в Java

ArrayList vs LinkedList

  • Операції з ArrayList і LinkedList (або будь-яким List) однакові
    • Вибір типу List залежить від задачі
  • Особливості ArrayList:
    • Швидкий довільний доступ (напр., list.get(11))
    • Повільніше додає/вилучає елементи всередині
    • Бо об'єкти фізично пересуваються під час вставки/вилучення

Додавання в середину ArrayList вимагає багато переміщень

Типи даних і винятки в Java

ArrayList vs LinkedList

  • Особливості LinkedList:
    • Повільніший довільний доступ (напр., list.get(11))
    • Швидше додає/вилучає елементи всередині
    • Бо нічого не пересувається фізично — змінюються лише кілька посилань

Додавання в середину LinkedList потребує лише зміни кількох вказівників

Типи даних і винятки в Java

Давайте потренуємось!

Типи даних і винятки в Java

Preparing Video For Download...