Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
ArrayList:
• доступ к произвольному элементу по индексу за константное время
• доступ к элементам по значению за линейное время
• вставка в конец в среднем производится за константное время
• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (
• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.
LinkedList:
• на получение элемента по индексу или значению потребуется линейное время
• на добавление и удаление в начало или конец списка потребуется константное
• вставка или удаление в/из произвольного место константное
• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
В целом,
ArrayList
это список, реализованный на основе массива, а LinkedList
— это классический двусвязный список, основанный на объектах с ссылками между ними.ArrayList:
• доступ к произвольному элементу по индексу за константное время
O(1)
;• доступ к элементам по значению за линейное время
O(N)
;• вставка в конец в среднем производится за константное время
O(1)
;• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (
capacity
) не изменяется);• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.
LinkedList:
• на получение элемента по индексу или значению потребуется линейное время
O(N)
;• на добавление и удаление в начало или конец списка потребуется константное
O(1)
;• вставка или удаление в/из произвольного место константное
O(1)
;• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
В целом,
LinkedList
в абсолютных величинах проигрывает ArrayList
и по потребляемой памяти, и по скорости выполнения операций. LinkedList
предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.👍48❤1😁1
Каким будет результат выполнения следующей программы?
Anonymous Quiz
15%
false false true
8%
true true true
7%
true false true
24%
0 -1 1
10%
false true true
36%
Узнать результаты
👍18
Forwarded from Java News
Telegram-бот счётчик сообщений на Java и Spring Boot
В этой статье я покажу, как написать Telegram-бот на Java с использованием Spring Boot, PostgreSQL и JPA. Также создадим исполняемый jar-файл. Сам же бот будет подсчитывать сообщения от пользователей и записывать эти данные в БД.
Читать статью
В этой статье я покажу, как написать Telegram-бот на Java с использованием Spring Boot, PostgreSQL и JPA. Также создадим исполняемый jar-файл. Сам же бот будет подсчитывать сообщения от пользователей и записывать эти данные в БД.
Читать статью
Telegraph
Telegram-бот счётчик сообщений на Java и Spring Boot
В этой статье я покажу, как написать Telegram-бот на Java с использованием Spring Boot, PostgreSQL и JPA. Также создадим исполняемый jar-файл. Сам же бот будет подсчитывать сообщения от пользователей и записывать эти данные в БД. Создаём Spring проект на…
👍21🔥5
Какое худшее время работы метода contains() для элемента, который есть в LinkedList?
O(N)
. Время поиска элемента линейно пропорционально количеству элементов в списке.👍35
Forwarded from Java Guru 🤓
Что выведет следующий код?
Anonymous Quiz
31%
36
28%
Результат вычисления имеет непредсказуемое поведение (undefined behavior)
28%
43
13%
33
👍18🎉3☃2😁1
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость,
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость,
capacity
) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize()
.👍41🔥6
Forwarded from Java News
Вашему вниманию предлагается новая подборка Java-новостей от InfoQ: 😃
✔️ Стал доступен билд № 31 для JDK 20 (ранний доступ)
✔️ Стал доступен билд № 5 для JDK 21 (ранний доступ)
✔️ Выпущен новый релиз Spring Framework, версии 6.0.4
и д.р.
Приятного чтения!
Читать статью
✔️ Стал доступен билд № 31 для JDK 20 (ранний доступ)
✔️ Стал доступен билд № 5 для JDK 21 (ранний доступ)
✔️ Выпущен новый релиз Spring Framework, версии 6.0.4
и д.р.
Приятного чтения!
Читать статью
👍10
Test-Driven Development with Java (2023) True PDF
Test-driven development enables developers to craft well-designed code and prevent defects. It’s a simple yet powerful tool that helps you focus on your code design, while automatically checking that your code works correctly. Mastering TDD will enable you to effectively utilize design patterns and become a proficient software architect.
The book begins by explaining the basics of good code and bad code, bursting common myths, and why Test-driven development is crucial. You’ll then gradually move toward building a sample application using TDD, where you’ll apply the two key rhythms -- red, green, refactor and arrange, act, assert. Next, you’ll learn how to bring external systems such as databases under control by using dependency inversion and test doubles. As you advance, you’ll delve into advanced design techniques such as SOLID patterns, refactoring, and hexagonal architecture.
Test-driven development enables developers to craft well-designed code and prevent defects. It’s a simple yet powerful tool that helps you focus on your code design, while automatically checking that your code works correctly. Mastering TDD will enable you to effectively utilize design patterns and become a proficient software architect.
The book begins by explaining the basics of good code and bad code, bursting common myths, and why Test-driven development is crucial. You’ll then gradually move toward building a sample application using TDD, where you’ll apply the two key rhythms -- red, green, refactor and arrange, act, assert. Next, you’ll learn how to bring external systems such as databases under control by using dependency inversion and test doubles. As you advance, you’ll delve into advanced design techniques such as SOLID patterns, refactoring, and hexagonal architecture.
👍12🔥1
Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
Каждый элемент
Для
Каждый элемент
LinkedList
хранит ссылку на предыдущий элемент, следующий элемент и ссылку на данные.static class Node<E> {Для
E item;
Node<E> next;
Node<E> prev;
//...
}
32-битных
систем каждая ссылка занимает 32 бита
(4 байта
). Сам объект (заголовок) вложенного класса Node
занимает 8 байт
. 4 + 4 + 4 + 8 = 20 байт
, а т.к. размер каждого объекта в Java
кратен 8
, соответственно получаем 24 байта
. Примитив типа byte
занимает 1 байт
памяти, но в JCF
примитивы упаковываются: объект типа Byte
занимает в памяти 16 байт
(8 байт
на заголовок объекта, 1 байт
на поле типа byte
и 7 байт
для кратности 8
). Также напомню, что значения от -128
до 127
кэшируются и для них новые объекты каждый раз не создаются. Таким образом, в x32 JVM 24 байта
тратятся на хранение одного элемента в списке и 16 байт
- на хранение упакованного объекта типа Byte
. Итого 40 байт
.Для
64-битной JVM
каждая ссылка занимает 64 бита
(8 байт
), размер заголовка каждого объекта составляет 16 байт
(два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт
и 24 байта
. Итого 64 байта
.👍46🔥6☃1
Сегодня java, guice и другие - помогут нам записать звук в представление чуть более непонятное чем эквалайзер (по крайней мере для меня). Вы при желании можете записать что-то другое.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Рисуем звук. Почувствуй себя нейросетью. Java, Guice
#Java #Guice
Сегодня java, guice и другие - помогут нам записать звук в представление чуть более непонятное чем эквалайзер (по крайней мере для меня). Вы при желании можете записать что-то другое.
Опросник по аннотациям Spring JPA: https://proftrud.ru/shop/21…
Сегодня java, guice и другие - помогут нам записать звук в представление чуть более непонятное чем эквалайзер (по крайней мере для меня). Вы при желании можете записать что-то другое.
Опросник по аннотациям Spring JPA: https://proftrud.ru/shop/21…
👍13🔥2
Микросервисы. Паттерны разработки и рефакторинга. (2019) PDF
Если вам давно кажется, что вся разработка и развертывание в вашей компании донельзя замедлились – переходите на микросервисную архитектуру. Она обеспечивает непрерывную разработку, доставку и развертывание приложений любой сложности.
Книга, предназначенная для разработчиков и архитекторов из больших корпораций, рассказывает, как проектировать и писать приложения в духе микросервисной архитектуры. Также в ней описано, как делается рефакторинг крупного приложения – и монолит превращается в набор микросервисов.
В этой книге:
• Как (и зачем!) использовать микросервисную архитектуру.
• Стратегии декомпозиции сервисов.
• Управление транзакциями и шаблоны запросов.
• Эффективные стратегии тестирования.
• Шаблоны развертывания, включая контейнеры и бессерверные платформы.
Если вам давно кажется, что вся разработка и развертывание в вашей компании донельзя замедлились – переходите на микросервисную архитектуру. Она обеспечивает непрерывную разработку, доставку и развертывание приложений любой сложности.
Книга, предназначенная для разработчиков и архитекторов из больших корпораций, рассказывает, как проектировать и писать приложения в духе микросервисной архитектуры. Также в ней описано, как делается рефакторинг крупного приложения – и монолит превращается в набор микросервисов.
В этой книге:
• Как (и зачем!) использовать микросервисную архитектуру.
• Стратегии декомпозиции сервисов.
• Управление транзакциями и шаблоны запросов.
• Эффективные стратегии тестирования.
• Шаблоны развертывания, включая контейнеры и бессерверные платформы.
👍15🔥2
Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому
ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому
16 байт
тратится на хранение упакованного объекта и 4 байта
(8 для x64
) - на хранение ссылки на этот объект в самой структуре данных. Таким образом, в x32 JVM 4 байта
используются на хранение одного элемента и 16 байт
- на хранение упакованного объекта типа Byte
. Для x64
- 8 байт
и 24 байта
соответственно.👍22🔥8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Java. Многопоточность. Как устроить Deadlock.
В данном видео рассказывается о том, что такое Deadlock, и как намеренно создать взаимную блокировку потоков на языке программирования Java.
Исходники:
https://github.com/Arhiser/java_tutorials/tree/master/src/ru/arhiser/multithreading/deadlock
Предыдущее…
Исходники:
https://github.com/Arhiser/java_tutorials/tree/master/src/ru/arhiser/multithreading/deadlock
Предыдущее…
🔥17👍4
Для ArrayList или для LinkedList операция добавления элемента в середину (list.add(list.size()/2, newElement)) медленнее?
Для ArrayList:
• проверка массива на вместимость. Если вместимости недостаточно, то увеличение размера массива и копирование всех элементов в новый массив
• копирование всех элементов, расположенных правее от позиции вставки, на одну позицию вправо
• вставка элемента
Для LinkedList:
• поиск позиции вставки
• вставка элемента
В худшем случае вставка в середину списка эффективнее для
Для ArrayList:
• проверка массива на вместимость. Если вместимости недостаточно, то увеличение размера массива и копирование всех элементов в новый массив
(O(N))
;• копирование всех элементов, расположенных правее от позиции вставки, на одну позицию вправо
(O(N))
;• вставка элемента
(O(1))
.Для LinkedList:
• поиск позиции вставки
(O(N))
;• вставка элемента
(O(1))
.В худшем случае вставка в середину списка эффективнее для
LinkedList
. В остальных - скорее всего, для ArrayList
, поскольку копирование элементов осуществляется за счет вызова быстрого системного метода System.arraycopy()
.👍22❤3
Грокаем стриминг (2023) PDF
Стриминговые системы позволяют сократить до минимума время между событием и обработкой информации, чтобы вы получали результаты в реальном времени. В приложениях для финансовой сферы, в вопросах безопасности и IoT важна каждая миллисекунда, поэтому без стриминговых систем не обойтись. А еще — это модно и приносит деньги ;) ! Неслучайно специалисты в Spark, Heron и Kafka так востребованы.
Наконец, вы можете познакомиться с созданием стриминговых приложений и обработкой событий в реальном времени не продираясь через технические подробности конкретных фреймворков, головоломные термины и сложные формулировки. Простой язык и яркие примеры позволят вам познакомиться с базовыми концепциями, а чтобы усвоить описанные идеи и приемы, вы построите собственную простую стриминговую программу с нуля.
От читателя не требуется опыт работы со стриминговыми системами. Примеры написаны на языке Java.
Стриминговые системы позволяют сократить до минимума время между событием и обработкой информации, чтобы вы получали результаты в реальном времени. В приложениях для финансовой сферы, в вопросах безопасности и IoT важна каждая миллисекунда, поэтому без стриминговых систем не обойтись. А еще — это модно и приносит деньги ;) ! Неслучайно специалисты в Spark, Heron и Kafka так востребованы.
Наконец, вы можете познакомиться с созданием стриминговых приложений и обработкой событий в реальном времени не продираясь через технические подробности конкретных фреймворков, головоломные термины и сложные формулировки. Простой язык и яркие примеры позволят вам познакомиться с базовыми концепциями, а чтобы усвоить описанные идеи и приемы, вы построите собственную простую стриминговую программу с нуля.
От читателя не требуется опыт работы со стриминговыми системами. Примеры написаны на языке Java.
👍29🔥3❤2🍾2❤🔥1
Forwarded from Java News
Вышла в свет EAP версия IntelliJ IDEA 2023.1
Вышла в свет EAP (программа раннего доступа) версия лучшей в мире IDE IntelliJ IDEA 2023.1 EAP.
Уже сегодня вы можете бесплатно пользоваться Ultimate Edition и самыми современными фичами, которые войдут в следующий релиз IntelliJ IDEA. 😃
Подробно и наглядно о новых фичах - в предложенной сегодня статье.
Приятного чтения!
Читать статью
Вышла в свет EAP (программа раннего доступа) версия лучшей в мире IDE IntelliJ IDEA 2023.1 EAP.
Уже сегодня вы можете бесплатно пользоваться Ultimate Edition и самыми современными фичами, которые войдут в следующий релиз IntelliJ IDEA. 😃
Подробно и наглядно о новых фичах - в предложенной сегодня статье.
Приятного чтения!
Читать статью
👍14🔥4🎉2
Java made easy: A beginner’s Handbook to easily Learn Java (2022) PDF
This book will help you learn how to code in JAVA very easily.
WHAT YOU WILL DISCOVER FROM THIS BOOK:
• The FULL BLUEPRINT ON HOW TO MOVE from a beginner to an expert in JAVA.
• Learn JAVA from scratch
• How to avoid most mistakes that most programmers in JAVA make.
• How to become a PRO in JAVA Programming.
• How to avoid most errors in JAVA.
This book will help you learn how to code in JAVA very easily.
WHAT YOU WILL DISCOVER FROM THIS BOOK:
• The FULL BLUEPRINT ON HOW TO MOVE from a beginner to an expert in JAVA.
• Learn JAVA from scratch
• How to avoid most mistakes that most programmers in JAVA make.
• How to become a PRO in JAVA Programming.
• How to avoid most errors in JAVA.
👍10🔥3
В реализации класса ArrayList есть следующие поля: Object[] elementData, int size. Объясните, зачем хранить отдельно size, если всегда можно взять elementData.length?
Размер массива
Размер массива
elementData
представляет собой вместимость (capacity
) ArrayList
, которая всегда больше переменной size - реального количества хранимых элементов. При необходимости вместимость автоматически возрастает.👍46