В чем разница между LinkedList и ArrayList?
Источник: Rrtutors.com Если вы новичок в программировании на Java, вам наверняка должно быть интересно, что лучше использовать при работе с коллекциями: LinkedList или ArrayList. Оба этих класса выполняют схожие функции, поэтому иногда бывает трудно решить, какой из них лучше применять в работе. В этой публикации мы определим различия между двумя классами и обсудим, где и когда их стоит использовать.Разница между 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. В третьей предварительной версии будут добавлены улучшения, включая замену защищенных шаблонов when предложениями в 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.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ