IT Java Collection
Основні методи PriorityQueue:
- boolean add(E element): цей метод вставляє вказаний елемент у цю пріоритетну чергу; - public peek(): цей метод отримує, але не видаляє голову цієї черги, або повертає null, якщо ця черга порожня; - public poll(): цей метод отримує та видаляє голову цієї черги або повертає null, якщо ця черга порожня;
Основні методи класу Stack:
1) - push(Object element) -Додає елемент на вершину стеку. 2) - pop() - Видаляє та повертає елемент з вершини стеку. 3) - peek() - Повертає елемент з вершини стеку без його видалення. 4) - empty() - Перевіряє, чи є стек порожнім. 5) - search(Object element) - Пошук заданого елемента в стеку та повертає його позицію, якщо елемент знайдено. Позиція рахується від вершини стеку, де вершина має позицію 1. Усі остальні методи Stack наслідує від Vector. Однак, використання цих методів може призвести до порушення порядку додавання та видалення елементів у стеку. Тому рекомендується використовувати тільки методи, описані вище, для роботи з класом Stack.
Клас ArrayList складається з різних конструкторів, які дозволяють грубо кажучи створювати список масивів, отже назви 3 конструктора, які найчастіше використовуються та поясни, що відбувається при їх створенні?
1) ArrayList arr = new ArrayList (); Просто створюється пустий array; 2) ArrayList <Object> arr1 = new ArrayList <Collection>(); ArrayList приймає якусь колекцію, яка у нас вже є і тд.. 3)ArrayList arr = new ArrayList (int capacity); Дає нам можливість сказати ту кількість мість яка нам необхідна. По дефолту в цьому масиві є 10 capacity. Example: Якщо ми наперед знаємо, що наш масив буде містити (НАПРИКЛАД) 130 елементів - то потрібно вказувати це в дужках параметрів, щоб створився масив з необхідною кількістю capacity, щоб Java не створювала новий масив та не копіювала всі ці елементи зі старого масиву у новий - коли нам не вистачить місця - це все впливає на швидкість роботи.
Які є типи LinkedList?
1) Doubly - це означає, що кожен елемент LinkedList мав дві силки (на попередній та на наступний елементи); (Doubly - дефолтни в Java) 2) Singly - це коли силка у кожного елемента лише на наступний елемент - тобто у Singly немає інформації про адрес попередніх елементів.
Яка відмінність між Iterator та foreach?
1) Iterator може видаляти елементи з колекції під час ітерації, в той час як foreach не може. 2) Iterator дозволяє читати та змінювати значення елементів під час ітерації, в той час як foreach дозволяє тільки читати значення. 3) foreach гарантує послідовність ітерації, тоді як ітератор не завжди гарантує той самий порядок ітерації. Однак, варто відзначити, що в більшості випадків використання foreach є більш перевагою, оскільки воно є простішим та менш помилковим способом ітерації через колекції.
Що ти знаєш про ієрархію колекцій на Java?
1) Інтерфейс Iterrable - його наслідником є Інтерфейс Сollection - це кореневий інтерфейс у колекціях реалізований усіма класами в рамках колекції. 2) В свою чергу Interface List, Queue, Set розширюють інтерфейс Collection. - Інтерфейс List - реалізований різними класами, такими як Vector, ArrayList, LinkedList. Є ще такий клас як Stack він - розширює Vector. Окрім того, LinkedList також - реалізує інтерфейс Deque. - Інтерфейс Queue - реалізований класом PriorityQueue - Інтерфейс Dequeu - Розширює інтерфейс Queue та реалізований класом ArrayDeque. - Інтерфейс Set - реалізовано класами HashSet, LinkedHashSet extend HashSet. - Інтерфейс SortedSet - реалізований класом TreeSet та розширює інтерфейс Set. Опис: Інтерфейс Collection є кореневим інтерфейсом для колекцій та розширює інтерфейс Iterable і визначає загальні методи для всіх колекцій. Далі, інтерфейси List, Queue та Set є дочірніми інтерфейсами інтерфейсу Collection, які визначають додаткові методи для конкретних типів колекцій. Класи Vector, ArrayList, LinkedList реалізують інтерфейс List, тобто вони мають відповідні методи відповідно до їх реалізації + клас Stack extend Vector. PriorityQueue реалізує інтерфейс Queue, який визначає методи для структури даних "черга". TreeSet реалізує інтерфейс SortedSet, який додає методи для сортування елементів у Set за допомогою порівняння їх значень. Клас ArrayDeque реалізує інтерфейс Deque, який розширює інтерфейс Queue і додає методи для додавання та вилучення елементів з обох кінців структури даних.
Яка відмінність між Масивами та Колекціями?
1) Масиви мають фіксований розмір, тоді як колекції можуть змінюватися в розмірі; 2) Колеції надають більше функціональності у роботі з елементами аніж масиви; 3) Доступ до елементів Колекцій може займати більше часу аніж доступ до елементів Масиву - тому що колекції зазвичай реалізовані за допомогою зв'язних списків або хеш-таблиць.
Кілька важливих моментів щодо PriorityQueue:
1) Необмежена пріоритетна черга на основі пріоритетної купи, яка дозволяє зберігати повторювальні значення; 2) PriorityQueue не дозволяє зберігати значення null; 3) Голова цієї черги є найменшим елементом заданого порядку; 4) Оскільки PriorityQueue не є потоково безпечним, Java надає клас PriorityBlockingQueue, який реалізує інтерфейс BlockingQueue для використання в багатопоточному середовищі Java;
Які елементи може зберігати у собу ArrayList? Які типи НЕ може зберігати у собі ArrayList? Що відбувається при ДОДАВАННІ примітивних значень до ArrayList?
1) Об'єкти будь-якого класу, включаючи null. 2) Не може зберігати примітивні типи даних. 3) При додаванні примітивних значень до ArrayList, вони автоматично конвертуються в об'єкти типу Object. ArrayList<Object> myList = new ArrayList<Object>(); // Додавання різних типів даних до списку myList.add("Hello"); // Додавання рядка myList.add(42); // Додавання цілого числа myList.add(3.14); // Додавання дійсного числа myList.add(true); // Додавання булевого значення
PriorityQueue Важливо☝️ Під час яких операцій не буде використовуватися сортування по пріоритету: Під час яких операцій використовується сортування по пріоритету:
1) При простому виведені елементів на екран не буде використовуватися сортування по пріоритету; 2) Но, коли ми безпосередньо використовуємо елемент тоді завжди відбувається сортування по пріоритету. Спочатку використовується елемент з найвищим пріоритетом: PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(); priorityQueue.add(4); priorityQueue.add(1); priorityQueue.add(7); priorityQueue.add(10); priorityQueue.add(8); System.out.println(priorityQueue); System.out.println(priorityQueue.remove()); System.out.println(priorityQueue.remove()); System.out.println(priorityQueue.remove()); System.out.println(priorityQueue.remove()); System.out.println(priorityQueue.remove()); Output: [1, 4, 7, 10, 8] 1 4 7 8 10 Вот, як ми бачимо - при простому виведені на екран число 8 не надавався пріоритет. А вже під час використання елементів, тобто їх видалення за допомогою методу remove() - усім елементам надавався пріоритет.
1)Що таке List та як ця колекція зберігає об'єкти? 2) Як ми можемо отримаи доступ до елементів? 3) Чи можемо ми зберігати null?
1) Це Інтерфейс в Java, який забезпечує зберігання елементів відповідно до порядку їх вставлення, також дозволяється зберігати повторювальні значення у цій колекції, та володіє певними методами для вставлення/видалення об'єктів і тд... 2) Ми можемо отримати доступ до елементів у списку, використовуючи їх індекси. 3) Ми можемо зберігати null в List.
Методи ArrayList: за допомогою цього методу ми можемо додавати елементи у наш ArrayList;
1)add (DataType element) → boolean 2)add (int index, DataType element) → boolean за допомогою цього методу ми можемо додавати та запихати у будь який індекс наше значення, але індекс має бути в межах size
Що буде відбуватися під капотом коли ми захочемо звернутися до Yana? Nazar Ivan Yan Oleg Vasyl Яким чином LinkedList шукає потрібні нам елементи, які він зберігає?
1)Сам LinkedList говорить - Адрес голови такий то.. Назар знаходиться в такій то такій то області пам'яті - отже ми знайшли Назара і починаємо просуватися дальше → Назар не знає де знаходиться Ян, але знає де знаходиться Іван він переходить до Івана і вже тоді через Івана ми добираємося до потрібного нам Яна - бо він сусід Івана. 2)Якщо у нас в листі буде міліон елементів і ми захочемо вивести двухсот тисячний елемент - то від 0 елемента до 200 000 елемента буде відбуватися ця пробіжка по сусідах поки ми не дістанемося до потрібного нам елемента - саме таким чином працює цей зв'язаний список. For Example: Отже LinkedList по суті представляє елементи в одному ланцюжку і кожна позиція ланцюжка має посилання на попередній і наступний елемент - насправді це додаткова нагрузка на пам'ять щоб кожна позиція ланцюжка містила в собі ще адрес (посилання) попереднього та наступного елемента.
Що відбуваєть при додаванні елементів допустимо в середину ArrayList та LinkedList?
ArrayList - Елементи просто сунуться праворуч щоб уступити місце для нового елемента; LinkedList - змушений дійти до цієї середини, так як він знає адресу лише голови та хвоста, і тоді створюється елемент і силки міняють свою траєкторію. (приклад LinkedList на фото). for example: Тому в ArrayList - є своєрідний недолік; Тому в LinkedList - є своєрідний недолік;
Через що методи Vector працюють набагато повільніше аніж ArrayList and LinkedList?
ArrayList and LinkedList - не синхронізовані класи, тобто вони по дефолту не призначені для роботи з декілька потоками. Vector - синхронізований клас, тобто він дозволяє роботу у багатопоточному середовищі. Через це методи у Vector працюють набагато повільніше ніж в ArrayList and LinkedList. Примітка: Тобто, ArrayList and LinkedList не призначені для того, щоб одна людина, наприклад, добавляла елементи, а друга людина в той самий час видаляла щось - тоді відбудеться розсинхронізація. Но Vector дозволяє це робити - він ставить блок іншому користувачу до тих пір поки перший не зробить потрібну йому операцію.
Які класи реалізують Interface List? Які з цих класів реалізують найчастіше?
ArrayList, LinkedList, Vector та Stack. Найчастіше використовують ArrayList and LinkedList. Клас Vector застарів з 5 Java.
Vector по своїй структурі дуже похожий на:
ArrayList, але краще за все використовувати ArrayList - якщо нам не потрібна підтримка багатопоточності.
Назви корневий інтерфейс в ієрархії колекцій та якими основними інтерфейсами він розширений?
Collection extend Iterable - В свою чергу Collection розширений іншими інтерфейсами, такими як List, Set і Queue.
За якими принципами працюють черги Queue в Java?
FIFO - First in first out;
Коли LinkedList порожній то на що посилається head and tall?
Head = null; and Tail = null;
Які інтерфейси реалізує LinkedList?
Iterable, Collection,List, Deque, Queue
PriorityQueue реалізує: інтерфейси:
Iterable<E>, Collection<E>, Queue<E>.
Якщо ArrayList створений на основі масива то на основі чого створений LinkedList?
LinkedList - він створенний на основі ланцюжка.
Topic LinkedList Що буде відбуватися під капотом коли ми захочемо звернутися до Олега? Nazar Ivan Yan Oleg Vasyl
LinkedList знає адрес Хвоста - тобто він знає де знаходиться Василь і за допомогою Хвоста він буде звертатися до Олега, а не з початку за допомоги Голови. тому що так набагато швидше він знайде Олега.(Олег зразу сусід Василя - для чого пробігатися по всіх елементах, якщо можна це зробити напряму через одного сусіда).
Нам потрібна потокобезпечна реалізація Queue, який клас слід використати в такому випадку?
PriorityBlockingQueue є однією з альтернативних реалізацій, якщо потрібна потокобезпечна реалізація.
Queue є інтерфейсом в Java, тому для його використання потрібно вибрати певну реалізацію, отже, які найпоширеніші реалізації Queue і чи є вони потокобезпечними?
PriorityQueue та LinkedList є двома найпоширенішими реалізаціями Queue. Проте жодна з цих реалізацій не є потокобезпечною.
Методи в класі PriorityQueue: Додає елемент у чергу пріоритету - якщо черга вже заповнена і немає місця для нового елемента цей метод викине виключення IllegalStateException
add(E e)
Methods of Deque Interface: Цей метод використовується для додавання елемента в кінці черги. Якщо ємність Deque обмежена і не залишилося місця для вставки, він повертає виняток IllegalStateException. Функція повертає true у разі успішного вставлення.
add(element)
Методи LinkedList: - Цей метод вставляє вказаний елемент у вказану позицію в цьому списку або в кінець колекції; - Цей метод додає вказаний елемент у кінець цього списку. - Цей метод вставляє всі елементи вказаної колекції в цей список, починаючи з вказаної позиції. - Цей метод додає всі елементи вказаної колекції в кінець цього списку в тому порядку, у якому їх повертає ітератор зазначеної колекції.
add(int index, E element) add(E e) addAll(int index, Collection<E> c) addAll(Collection<E> c)
Методи ArrayList: цей метод добавляє в кінець інший ArrayList;
addAll(ArrayList aL) → boolean Example: ArrayList<String> list = new ArrayList<String>(); list.add("Bye"); list.add("Hello"); list.add("ok"); list.add(1, "Nazar"); ArrayList<String> list2 = new ArrayList<String>(); list2.add("Kupnovytskyi"); list2.add("Sakharukh"); list.addAll(list2); На екран виводиться: Bye Nazar Hello ok Kupnovytskyi Sakharukh addAll(int index, ArrayList aL) → boolean; - за допомогою цього метода ми вказуємо на який КОНКРЕТНО індекс додати елементи іншого ArrayList!
Методи LinkedList: Цей метод вставляє вказаний елемент на початку цього списку. Цей метод додає вказаний елемент у кінець цього списку.
addFirst(E e) addLast(E e)
Methods of Deque Interface: Цей метод використовується для додавання елемента на початку черги. Якщо ємність Deque обмежена і не залишилося місця для вставки, він повертає виняток IllegalStateException. Функція повертає true у разі успішного вставлення.
addFirst(element)
Methods of Deque Interface : Цей метод використовується для додавання елемента в кінці черги. Якщо ємність Deque обмежена і не залишилося місця для вставки, він повертає виняток IllegalStateException. Функція повертає true у разі успішного вставлення.
addLast(element)
Методи ArrayList: Цей метод дозволяє швидко очистити наш ArrayList!
clear () → void
Методи LinkedList: Цей метод видаляє всі елементи зі списку.
clear()
Методи в класі PriorityQueue: Видаляє всі елементи з цієї пріоритетної черги.
clear()
Методи в класі PriorityQueue: Повертає компаратор, який використовується для впорядкування елементів у цій черзі, або null, якщо цю чергу відсортовано відповідно до природного порядку її елементів.
comparator()
Methods of Deque Interface: Цей метод використовується для перевірки того, чи містить черга даний об'єкт чи ні.
contains()
Методи ArrayList: приймає об'єкт і перевіряє чи є такий об'єкт в нашому ArrayList чи немає і повертає true or false.
contains(Object element) → boolean До цього методу відноситься особливість порівняння об'єктів за допомогою equals();
Методи LinkedList: Цей метод повертає true, якщо цей список містить вказаний елемент.
contains(Object o)
Методи в класі PriorityQueue: Повертає true, якщо ця черга містить вказаний елемент.
contains(Object o)
Methods of Deque Interface: Цей метод повертає ітератор для deque. Елементи повертатимуться в порядку від останнього (хвіст) до першого (голова).
descendingIterator()
Методи LinkedList: Цей метод повертає ітератор для елементів у цій двоканальній послідовності у зворотному порядку.
descendingIterator()
Методи Queue: показує верхній елемент в нашій черзі. Викине exception якщо в черзі немає елементів;
element ()
Methods of Deque Interface: Цей метод використовується для отримання, але не видалення голови черги, представленої цією deque.
element()
Методи в класі PriorityQueue: Виконує задану дію для кожного елемента Iterable, доки всі елементи не будуть оброблені або дія не викличе виняток.
forEach(Consumer<? super E> action)
Методи LinkedList: Цей метод повертає елемент у вказаній позиції в цьому списку.
get(int index)
Методи ArrayList: в параметрі ми пишемо індекс елемента, який ми хочемо отримати.
get(int index) → DataType він працює зі швидкістю O(1);
Methods of Deque Interface: Цей метод використовується для отримання першого елемента цієї deque.
getFirst()
Методи LinkedList: - Цей метод повертає перший елемент у цьому списку. - Цей метод повертає останній елемент у цьому списку.
getFirst() getLast()
Methods of Deque Interface: Цей метод використовується для отримання, але не видалення останнього елемента цієї deque.
getLast()
Методи ArrayList: цей метод повертає index найпершого знайденого елемента, який ми шукаємо.
indexOf(Object element) → int ArrayList<String> list = new ArrayList<String>(); list.add(("Bye")); list.add(("Hello")); list.add(("Ok")); list.add(("Good Night")); for (String sb:list){ System.out.println(sb +" ");} System.out.println(list.indexOf("Ok")); Output: 2
Методи ArrayList: цей метод перевіряє чи пустий ArrayList;
isEmpty() → boolean
Methods of Deque Interface: Цей метод повертає ітератор для deque. Елементи будуть повернуті в порядку від першого (голова) до останнього (хвіст).
iterator()
Методи ArrayList: цей метод працює так само як і метод indexOf(), таке саме порівняння під капотом за допомогою методу equals(); - але він виводить ОСТАННІЙ index однакових об'єктів!
lastIndexOf(Object element) → int Example: list.add(("Bye")); list.add(("Bye")); System.out.println(list.indexOf(new String("Bye"))); На екран виведеться 1; Якщо об'єкт не знайдений буде виводитися на екран -1;
Методи в класі PriorityQueue: Додає елемент у чергу пріоритету - якщо черга вже заповнена, тоді цей метод просто поверне false, якщо додавання неможливе.
offer(E e)
Методи LinkedList: - Цей метод вставляє вказаний елемент на кінець цього списку. - Цей метод вставляє вказаний елемент на початку цього списку. - Цей метод вставляє вказаний елемент у кінець цього списку.
offer(E e) offerFirst(E e) offerLast(E e)
Methods of Deque Interface: Цей метод використовується для додавання елемента на початку черги. Цей метод є кращим, ніж метод addFirst(), оскільки він не створює exception, коли місткість контейнера заповнена, оскільки він повертає false.
offerFirst(element)
Methods of Deque Interface: Цей метод використовується для додавання елемента в кінці черги. Цей метод є кращим за метод add(), оскільки цей метод не створює exception, коли місткість контейнера заповнена, оскільки він повертає false
offerLast(element)
Методи Queue: він працює точно так само як і element - тобто виводить на екран верхній елемент нашої черги - но exception він не викидає якщо ми всі елементи видалили і вже нічого немає в черзі, він просто поверне null.
peek ()
Методи LinkedList: Цей метод отримує, але не видаляє заголовок (перший елемент) цього списку.
peek()
Методи LinkedList: - Цей метод отримує, але не видаляє, перший елемент цього списку або повертає null, якщо цей список порожній. - Цей метод отримує, але не видаляє, останній елемент цього списку або повертає null, якщо цей список порожній.
peekFirst() peekLast()
Методи Queue: видаляє елементи, і коли елементів вже немає в колекції то він просто виводить null, а не exception як метод remove().
poll ()
Методи LinkedList: - Цей метод отримує та видаляє заголовок (перший елемент) цього списку. - Цей метод отримує та видаляє перший елемент цього списку або повертає null, якщо цей список порожній. -Цей метод отримує та видаляє останній елемент цього списку або повертає значення null, якщо цей список порожній.
poll() pollFirst() pollLast()
Методи Queue: видаляє елемент та повертає на екран той елемент, який видалився. Коли вже немає елементів у нашій колекції і ми все одно продовжуємо видаляти - виводиться exception.
remove ()
Методи ArrayList: за допомогою об'єкта ми видаляємо елемент
remove (Object element) → boolean
Методи LinkedList: - Цей метод отримує та видаляє заголовок (перший елемент) цього списку. - Цей метод видаляє елемент у вказаній позиції в цьому списку. - Цей метод видаляє перше входження зазначеного елемента зі списку, якщо він присутній. - Цей метод видаляє та повертає перший елемент зі списку. - Цей метод видаляє перше входження зазначеного елемента в цьому списку (під час обходу списку від початку до кінця). - Цей метод видаляє та повертає останній елемент зі списку. - Цей метод видаляє останнє входження зазначеного елемента в цьому списку (під час обходу списку від початку до кінця).
remove() remove(int index) remove(Object o) removeFirst() removeFirstOccurrence(Object o) removeLast() removeLastOccurrence(Object o)
Методи в класі PriorityQueue: Видаляє всі елементи цієї колекції, які задовольняють заданий предикат.
removeIf(Predicate<? super E> filter)
Методи в класі PriorityQueue: Вилучає один екземпляр зазначеного елемента з цієї черги, якщо він присутній.
remove(Object o)
Методи ArrayList: цей метод працює як replace, він міняє елемент, який вже є на елемент, який нам потрібен!
set(int index, DataType element) —> DataType Ми вказуємо індекс потім ми вказуємо елемент, який ми хочемо помістити на цей індекс!
Методи LinkedList: Цей метод замінює елемент у вказаній позиції в цьому списку вказаним елементом.
set(int index, E element)
Методи LinkedList: Цей метод повертає кількість елементів у цьому списку.
size()
Методи ArrayList: цей метод виводить інформацію про кількість об'єктів (елементів) в нашому ArrayList!
size() → int
Методи в класі PriorityQueue: Повертає масив, що містить усі елементи цієї черги.
toArray()
Методи в класі PriorityQueue: Повертає масив, що містить усі елементи цієї черги; тип середовища виконання поверненого масиву - це тип зазначеного масиву.
toArray(T[] a)
Методи ArrayList: показує як виглядає наш ArrayList із середини. Доречі, щоб не виводити елементи нашого ArrayList за допомогою for або foreach ми можемо просто використати цей метод- це в принципі працює так само як і зі звичайними масивами!
toString(); → String
Який тип масиву лежить в основі ArrayList? Що буде якщо у нас масив з дефолтними capacity - а ми внесли більше елементів?
В основі ArrayList лежить масив типу Object. Створиться новий масив в півтора рази більший аніж попередній + ті елементи які вийшли за ці дефолтні капасіті.
В якому порядку зберігаються елементи в LinkedList?
В якому порядку ми добавили елементи в такому порядку вони будуть зберігатися (вони автоматично не сортуються);⬆️ - тобто можна сказати, що вони зберігаються в порядку додавання.
Як правило LinkedList слід використовувати коли:
Велика кількість операцій додавання/видалення елементів. Особливо коли справа йде про елементи на початку або в кінці колекції. - тому що, якщо це буде допустимо в середині то Java змушена рухатися до того місця по ланцюжку - де потрібно додати, або видалити елемент; Це як правило, насправді майже у всіх випадках бажано використовувати ArrayList - тому що він буде працювати швидше і підходить майже під усі задачі краще ніж LinkedList.
Часте запитання на співбесіді: Як працює ArrayList?
Всередині аррейлиста є звичайний масив Object - у випадку його заповнення створюється новий масив і в цей новий масив копіюються елементи старого масиву таким чином досягається функціонал динамічного масиву.
Переваги використання Deque:
Двосторонній/Гнучкість: головною перевагою інтерфейсу Deque є те, що він забезпечує двосторонню чергу, яка дозволяє отримувати, додавати та видаляти елементи з обох кінців черги.
Яку специфіку зберігання елементів було закладено в Queue:
Зазвичай нові елементи додаються в кінець черги, а видаляються з початку черги. Це називається правилом FIFO (First-In-First-Out), де перший доданий елемент буде першим видаленим. Взагалі Queue - не створений для того, щоб елементи в ньому ми видаляли із середини, тому що в queue ми як правило видаляємо елемент з початку черги, а добавляємо в кінець черги.
Vector - це
Застарілий synchronized клас, який в своїй основі зберігає масив елементів Object. Однак, ця синхронізація коштує зниження продуктивності програми. Не рекомендується для використання.
Розкажи про взаємодію LinkedList with Queue:
Клас LinkedList імплементує не тільки інтерфейс List но і інтерфейс Deque. Взагалі LinkedList - є одним із самих розповсюджених класів, які використовуються коли нам потрібна черга: LinkedList implement Deque а Deque є наслідником Queue - тому ми можемо говорити, що LinkedList імплементує Queue теж. Якщо LinkedList використовується як Queue - то відповідно потрібно використовувати методи Queue.
Розкажи про ArrayDeque:
Клас який дозволяє повторювальні значення та забезпечує продуктивність для вставки та видалення елементів з обох кінців черги, не допускає null та звернення до елементів по їх індексу. Він реалізує інтерфейс Deque та використовує динамічний масив <T> змінного розміру для зберігання своїх елементів. Дозволяє використовувати як LIFO так і FIFO. Цей клас є більш ефективною альтернативою традиційному класу Stack, який раніше використовувався для двосторонніх операцій.
Шо таке колеції?
Колекції - це структура даних для зберігання об'єктів. Кожен об'єкт в колекції має свій власний індекс або ключ, який можна використовувати для доступу до нього. Крім того, колекції зазвичай надають набір методів для роботи з об'єктами.
Інтерфейс Queue містить два методи для додавання елементів в чергу: add() and offer() в чому полягає різниця між ними?
Метод add() викине виняток типу IllegalStateException, якщо неможливо додати елемент до заповненої черги. Метод offer() поверне false без винятку. Примітка: Отже, використання методу add() може призвести до винятку, який необхідно буде перехопити і обробити, щоб запобігти некоректній роботі програми. В той же час метод offer() поверне false, якщо елемент не може бути доданий до черги, що дозволяє програмі продовжувати виконання без винятків.
Мова програмування Java є повністю об'єкто єрієнтованою?
Мова програмування Java не є повністю об'єктно-орієнтованою мовою тому що в Java існують явні примітивні типи даних, які не є об'єктами і не підтримують наслідування і поліморфізм.
Класи, які реалізують інтерфейс черги(Queue):
Найвідоміші: PriorityQueue ArrayDeque LinkedList PriorityBlockingQueue Усі: AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedDeque, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedTransferQueue, SynchronousQueue.
Stack це -
Наслідник Vector, застарілий synchronized клас, який використовує принцип LIFO. Можна додавати і брати елементи тільки з одного кінця. Останній елемент, який зайшов - перший вийде. Він Не рекомендується для використання;
Чому нам потрібно використовувати ArrayList замість простого масиву?
Отже, Ми повинні використовувати ArrayList тоді, коли нам потрібна структура похожа на масив, але щоб була можливість видаляти елементи, або добавляти нові елементи, міняти елементи і так далі..
Чи можемо ми видаляти елементи з будь якої позиції в Queue і які можуть бути наслідки?
Так, ми можемо видаляти елементи з будь-якої позиції в Queue, проте якщо ми видаляємо елементи з середини черги, то це може призвести до порушення порядку FIFO (першим прийшов - першим пішов), який є основним принципом роботи Queue. Наприклад: якщо ми видаляємо елемент з середини черги, то всі наступні елементи повинні зсунутися на одну позицію вліво, щоб замінити видалений елемент. Якщо ми не забезпечимо цього правильно, це може призвести до порушення порядку FIFO та неправильної роботи програми. Тому, якщо ми хочемо видалити елемент з середини черги, ми повинні перш ніж видаляти елемент, видалити всі елементи, які знаходяться перед ним.
Де зберігаються елементи класу Stack? За яким принципом зберігаються елементи?
У Java клас Stack зберігає свої елементи у векторі (Vector). Клас Stack використовує цей самий масив для зберігання своїх елементів у порядку «останній увійшов, перший вийшов» (LIFO), що означає, що останній елемент, вставлений у стек, буде першим елементом, який вискочить зі стеку.
Що таке Iterator?
Це об'єкт, за допомогою якого ми можемо перебирати елементи наших колекцій.
Яка Основна ідея Java Collection Framework?
в тому, щоб забезпечити спільну інтерфейсну модель для різних типів колекцій, що дозволяє легко змінювати і підтримувати код.
інтерфейс Deque є частиною Java Collection Framework для чого він використовується ?
використовується для реалізації двосторонньої черги, тобто структури даних, яка дозволяє вставляти та видаляти елементи з обох кінців черги та отримувати ці елементи. Example: Ось приклад того, як можна використовувати Deque в Java: public static void main(String[] args) { Deque<Integer> deque = new ArrayDeque<>(); deque.addLast(2); deque.addFirst(1); int first = deque.removeFirst(); int last = deque.removeLast(); System.out.println("First: " + first + ", Last: " + last);} Output: First: 1, Last: 2
Queue це -
це колекція, яка зберігає послідовність елементів, де нові елементи додаються до кінця черги, а вилучаються з початку. Це правило називається FIFO - First In First Out (перший прийшов, перший пішов). Дозволяє повторювальні значення та не дозволяє використання null. Принцип такий: ми прийшли в магазин взяли продукти та перші прийшли на касу і за нами вистроїлася черга - то касир спочатку обслужить того хто перший прийшов і так в порядку черги він буде обслуговувати усіх людей один за одним.
PriorityQueue - це
черга, яка пріоритизує елементи (сортує їх) та віддає їх у порядку пріоритету (сортування). Така черга гарантує, що першим елементом завжди буде найменший елемент, або в алфавітному порядку. У цій черзі використовується натуральне сортування або те, яке ми описуємо за допомогою компаратора. Елементи сортуються від найменшого до найбільшого, а якщо це String то в алфавітному порядку;
Що таке Deque і як розшифровується?
інтерфейс, який дозволяє додавати і видаляти елементи з обох кінців черги. Розшифровується як Double Ended Queue (Двостороння черга),
Що таке Java Collection FrameWork?
ієрархія інтерфейсів та їх реалізацій, яка є частиною JDK і дозволяє розробнику користуватися великою кількістю структур даних з «коробки». Second term: Java Collection Framework - це архітектура, яка допомагає керувати та зберігати групу об'єктів. Вона містить інтерфейси та класи, які підтримують різні структури даних та алгоритми для роботи з ними. Ці структури даних дозволяють зберігати, керувати, маніпулювати та сортувати об'єкти в Java зручним і ефективним способом.