середа, 15 квітня 2020 р.

Клас LinkedList

LinkedList — це структура даних Java, що являє собою пов’язаний список елементів (об’єктів).

Різниця між ArrayList та LinkedList полягає в тому, що ArrayList реалізований у вигляді масиву, а LinkedList у вигляді пов’язаних між собою об’єктів. ArrayList швидко виконує читання і заміну елементів (посилань на об’єкти), проте, щоб вставити новий елемнт в середину ArrayList або видалити існуючий в середині ArrayList здійснюється послідовний зсув цілого ряду елементів масиву. В LinkedList доволі швидко відбувається вставлення нового елементу або видалення існуючого. Це відбувається тому, що в середині реалізації LinkedList змінюються лише посилання на попередній і наступний об’єкти (елементи). Проте доступ до об’єктів по індексу в LinkedList відбувається повільніше ніж в ArrayList. Тож загалом, LinkedList корисний, коли необхідно часто вставляти та видаляти елементи зі списку, а в інших випадках краще використовувати ArrayList.

Існує два конструктури LinkedList:

LinkedList()
LinkedList (Collection c)
Перший конструктор створює пустий список, а другий – створює пов’язаний список із іншої колекції.

Клас LinkedList розширює клас AbstractSequentalList та реалізує інтерфейси List, Dequeue та Queue. Реалізація останніх двох інтерфейсів (черг) означає, що ми можемо працювати із пов’язаним списком як із стеком з використанням методів pop(), push(), poll(), pollFirst(), pollLast() і т.п. Детальніше дивіться документацію по заданим інтерфейсам.

Далі попрацюємо з LinkedList, який міститиме в якості елементів об’єктні змінні типу Car.

Спочатку реалізуємо наш клас Car:
public class Car {
   private String name;
   private double price;
   private int year;
   public Car(String name, double price, int year) {
    this.name = name;
    this.price = price;
    this.year=year;
   }
   @Override
   public String toString() {
     return "\n Car [name=" + name + ", price=" + price + ", year=" + year+ "]";
   }
}
Клас Car містить лише поля, конструктор, який заповнює дані поля та заміщений метод toString(), який видаватиме нам інформацію про автомобіль у вигляді рядка.

Наступний клас демонструє роботу з LinkedList:
import java.util.ArrayList;
import java.util.LinkedList;

public class TestLinkedList {

   private LinkedList<Car> ll=new LinkedList<>();

   public static void main(String[] args) {
    TestLinkedList t=new TestLinkedList();
    t.test(); 
   }
 
   void test(){
    Car car1=new Car("Ferrary", 10800, 1995);
    Car car2=new Car("Запорожець", 2600, 1989);
    ll.add(car1);
    ll.add(car2);
    //додаємо в початок списку
    ll.addFirst(new Car("Alfa Romeo 155", 11678, 2000));
    ll.remove(car2); // видалити об'єкт
    System.out.println("Післі видалення car2: "+ll);
    ll.remove(1); //видалити елемент за індексом
    System.out.println("Післі видалення елементу за індексом [1]: "+ll);
    Car myCar=ll.get(0);
    System.out.println("Отриманий елемент за індексом [0]:"+myCar);
    ll.set(0, car1); //замінити елемент за індексом
    System.out.println("Замінений елемент за індексом [0]"+ll.get(0));
    ArrayList<Car> arrList=new ArrayList<Car>();
    arrList.add(car1);
    arrList.add(car2);
    ll.addAll(arrList); //додаємо вміст ArrayList у наш LinkedList
    System.out.println("Після додавання ArrayList:"+ll);
   }
}

Результат виконання програми:
Після видалення car2: [
 Car [name=Alfa Romeo 155, price=11678.0, year=2000], 
 Car [name=Ferrary, price=10800.0, year=1995]]
Після видалення елементу за індексом [1]: [
 Car [name=Alfa Romeo 155, price=11678.0, year=2000]]
Отриманий елемент за індексом [0]:
 Car [name=Alfa Romeo 155, price=11678.0, year=2000]
Замінений елемент за індексом [0]
 Car [name=Ferrary, price=10800.0, year=1995]
Після додавання ArrayList:[
 Car [name=Ferrary, price=10800.0, year=1995], 
 Car [name=Ferrary, price=10800.0, year=1995], 
 Car [name=Запорожець, price=2600.0, year=1989]]

Детальніше про методи класу дивіться документацію по класу LinkedList.

Немає коментарів:

Дописати коментар