JavaRush /Java блог /Random UA /Кава-брейк #129. У чому різниця між LinkedList та ArrayLi...

Кава-брейк #129. У чому різниця між LinkedList та ArrayList? Нові функції, які з'являться в Java 19

Стаття з групи Random UA

У чому різниця між LinkedList та ArrayList?

Джерело: Rrtutors.com Якщо ви новачок у програмуванні на Java, вам, напевно, має бути цікаво, що краще використовувати при роботі з колекціями: LinkedList або ArrayList. Обидва цих класу виконують схожі функції, тому іноді буває важко вирішити, який їх краще застосовувати у роботі. У цій публікації ми визначимо різницю між двома класами і обговоримо, де і коли їх варто використовувати. Кава-брейк #129.  У чому різниця між LinkedList та ArrayList?  Нові функції, які з'являться в Java 19 - 1

Різниця між ArrayList і LinkedList в Java

Давайте порівняємо ArrayList і LinkedList за їхніми критеріями:

Маніпуляції

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

Доступ

ArrayList швидше зберігають та витягують дані. З іншого боку, LinkedList підтримує більш швидку обробку даних.

Реалізація

ArrayList реалізує лише список, а LinkedList реалізує і список, і чергу. LinkedList також часто використовується як черги.

Внутрішня реалізація

ArrayList елементи зберігаються в динамічному масиві, тоді як LinkedList використовують двозв'язковий (doubly-linked) список.

Коли використовувати ArrayList та LinkedList?

ArrayList підходить для роботи з колекцією, доступною тільки для читання, а LinkedList підходить для роботи з колекцією, яка дозволяє різні модифікації даних, такі як додавання та видалення.

Приклад LinkedList:

import java.util.LinkedList;

import java.util.List;

public class LinkeddExample {

    public static void main(String[] args) {

        List<String> myGroup=new LinkedList<>();

        myGroup.add("Pohekar");

        myGroup.add("Sumedh");

        myGroup.add("Nikir");

        System.out.println("Create Group: "+myGroup);

        myGroup.remove("Pohekar");

        System.out.println("Remove Group element: "+myGroup);

        myGroup.set(1,"Niha");

        System.out.println("Modify Group: "+myGroup);

    }

}

Приклад ArrayList:

import java.util.ArrayList;

import java.util.List;

public class ArrayListExca {

    public static void main(String[] args) {

        List<String> Pro=new ArrayList<>();

        Pro.add("PythonPro");

        Pro.add("JavaPro");

        Pro.add("C#Pro");



        System.out.println("Traversing ArrayList...");

        for(String s:Pro){

            System.out.println(s);


    }

    }

}

JDK 19: нові функції, які з'являться в Java 19

Джерело: InfoWorld Віртуальні потоки, зіставлення шаблонів для switch-виразів, векторний API та порт Linux/RISC-V — все це вже у вересні цього року з'явиться у Java 19, новому релізі мови з короткостроковою підтримкою. Крім того, Java Development Kit 19 нещодавно запропонували ще одну функцію: попередній перегляд шаблонів записів (Record patterns) для навігації за даними та їх обробки. Відповідно до плану, що розробляється з поліпшення мови Java, версія JDK 19 або просто Java 19 потенційно може містити величезну кількість функцій: від універсальних дженериків до об'єктів-значень. JDK 19 стане черговим апдейтом слідом за JDK 18, представленим 22 березня 2022 року. Стандартна версія Java випускається кожні шість місяців. Розробники OpenJDK опублікували офіційний графік випуску JDK 19. Згідно з ним, стабільний реліз з'явиться 20 вересня. Перед цим розробники зможуть ознайомитись із попередніми збірками, які вийдуть 9 червня та 21 липня. Реліз-кандидати буде опубліковано 11 серпня та 25 серпня. Складання раннього доступу JDK 19 доступні за адресаою jdk.java.net/19 . Пропоновані JDK 19 функції включають:
  • Попередній перегляд шаблонів записів для визначення значень записів. Шаблони записів та шаблони типів можуть бути вкладені один в одного, щоб забезпечити декларативну, потужну та компоновану форму навігації та обробки даних. Ідея цієї функції полягає в тому, щоб додати розширення зіставлення шаблонів для вираження складніших складових запитів даних без зміни синтаксису або семантики шаблонів типів. Ця пропозиція заснована на зіставленні шаблонів для instanceof, представленому в JDK 16 у березні 2021 року. Далі, у майбутніх планах може знадобитися розширення шаблонів записів за допомогою таких можливостей, як шаблони масивів та vararg-шаблони. Запис шаблонів є частиною Project Amber , спрямованого на вивчення та розвиток невеликих функцій Java, орієнтованих на продуктивність.

  • Попередній перегляд чужої функції та API пам'яті . Він представить API, за допомогою якого Java-програми зможуть взаємодіяти з кодом та даними поза середовищем виконання Java.

    Завдяки ефективному виклику зовнішніх функцій (коду поза середовищем виконання Java) та безпечному доступу до зовнішньої пам'яті (пам'яті, не керованої JVM) API дозволить програмам Java викликати власні бібліотеки та обробляти власні дані без будь-якої небезпеки для Java Native Interface (JNI).

  • Попередній перегляд віртуальних потоків (virtual threads). Ця пропозиція є полегшеними потоками, які значно скорочують зусилля з написання, обслуговування та спостереження за високопродуктивними паралельними додатками. Ідея пропозиції полягає у забезпеченні можливості масштабування серверних програм, написаних у простому стилі “потік на запит” (thread-per-request) з оптимальним використанням обладнання. Це дозволить впроваджувати код, що використовує java.langThread API , віртуальні потоки з мінімальними змінами, а також усувати неполадки, виконувати налагодження і профільування віртуальних потоків за допомогою існуючих інструментів JDK.

  • Третя попередня версія зіставлення шаблонів для виразів та операторів switch. Вона розширює зіставлення шаблонів (pattern matching) до switch, щоб дозволити тестувати вираз по ряду шаблонів, кожен з яких має певну дію. Завдяки цьому складні запити, орієнтовані дані, можуть бути виражені лаконічно та безпечно. Ця функція раніше була попередньо представлена ​​в JDK 17 і JDK 18. У третій попередній версії будуть додані поліпшення, включаючи заміну захищених шаблонів при пропозиціях у switch-блоках. Ідея пропозиції полягає в розширенні виразності та застосовності switch-виразів та операторів.

  • Четверта інкубація vector API виражатиме векторні обчислення, які надійно компілюються під час виконання оптимальними векторними інструкціями на підтримуваних архітектурах процесорів. Це забезпечить більшу продуктивність порівняно з еквівалентними скалярними обчисленнями. Розробники, які використовують новий API, отримають можливість писати складні векторні алгоритми на Java, використовуючи автовекторизатор HotSpot, але з моделлю користувача, яка робить векторизацію більш передбачуваною і надійною. Векторний API раніше був інкубований JDK 16, JDK 17 і JDK 19.

    В якості ще одного доповнення до векторного API будуть розширені інтегральні побітові lanewide-операції, включаючи такі операції, як підрахунок кількості одиничних бітів, зміна порядку бітів на зворотний, а також стиснення і розширення бітів.

  • З портом Linux/RISC-V мова Java отримає підтримку набору апаратних інструкцій, який підтримується широким спектром мовних наборів інструментів. RISC-V є сімейством споріднених ISA. Порт Linux/RISC-V підтримуватиме лише конфігурацію RV64GV RISC-V, 64-розрядну ISA загального призначення, що включає векторні інструкції.

    Порт отримає підтримку наступних параметрів віртуальної машини HotSpot: інтерпретатор шаблонів, JIT-компілятор C1 (клієнт), JIT-компілятор C2 (сервер) та всі поточні основні збирачі сміття, включаючи ZGC та Shenandoah.

Як і JDK 18, JDK 19 стане короткостроковим релізом із шестимісячною підтримкою. Попередній випуск, JDK 17, був LTS-випуском з гарантією підтримки протягом декількох років. Його було представлено 14 вересня 2021 року.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ