Java библиотека
31.6K subscribers
2.3K photos
77 videos
8 files
2.03K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Как поведёт себя уже инстанциированный итератор для collection, если вызвать collection.remove()?

При следующем вызове методов итератора будет выброшено ConcurrentModificationException.
👍14
Шпаргалка по структурам данных в Java

К каждому собеседованию важно готовиться и проще всего это делать, когда перед глазами есть готовый материал. В данной публикации я хочу поделиться с вами своей шпаргалкой, которую использую перед собеседованиями для повторения структур данных в Java.

Читать статью
👍17🔥101
Основы программирования с Java (2022) True PDF

Эта книга предназначена для всех, кто хочет изучить основы программирования с использованием языка Java.
Эта книга даст понимание основных элементов программирования на Java и абстракции данных с использованием объектно-ориентированного подхода. С этой книгой Вы научитесь писать программы с использованием переменных, массивов, управляющих операторов, циклов, рекурсии, абстракции данных и объектов в интегрированной среде разработки. Вы изучите основы языка программирования Java, познакомитесь с его синтаксисом, типами данных, объектами и классами и многим другим.
👍12🔥2
Как избежать ConcurrentModificationException во время перебора коллекции?

• Попробовать подобрать или реализовать самостоятельно другой итератор, работающий по принципу fail-safe.
• Использовать ConcurrentHashMap и CopyOnWriteArrayList.
• Преобразовать список в массив и перебирать массив.
• Блокировать изменения списка на время перебора с помощью блока synchronized.
Отрицательная сторона последних двух вариантов - ухудшение производительности.
👍20
new vs valueOf

Старайтесь всегда использовать метод valueOf вместо конструктора в стандартных классах-оболочках примитивных типов, кроме тех случаев, когда вам нужно конкретно выделить память под новое значение. Сейчас объясню, почему.

Все оболочки, кроме чисел с плавающей точкой, от Byte до Long, имеют кэш. По умолчанию этот кэш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кэша. Значение из кэша достается в 3.5 раза быстрее, чем при использовании конструктора, плюс идёт экономия памяти.

Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной.
37👍5
Зачем добавили ArrayList, если уже был Vector?

• Методы класса Vector синхронизированы, а ArrayList - нет;
• По умолчанию, Vector удваивает свой размер, когда заканчивается выделенная под элементы память. ArrayList же увеличивает свой размер только на половину.

Vector это устаревший класс и его использование не рекомендовано.
👍30
Каким будет результат сравнения в следующем коде?

Ответ:
s1 == s2 ? true

s1 == s3 ? false

s1 equals s3 ? true

Вопрос на понимание работы пула строк в Java и на понимание сравнения строк. Разберем детально: Переменная s1 ссылается на строку в пуле уникальных строк в памяти, переменная s2 ссылается на ту же саму строку в пуле уникальных строк, что и переменная s1, первое сравнение будет true, так как s1 и s2 ссылаются на один и тот же объект. Переменная s3 ссылается на новый объект, который не находится в пуле уникальных строк, так как он создан через new, следовательно второе сравнение будет false, так как сравниваем переменные которые ссылаются на на два разных объекта. Третье сравнение будет true, так как мы сравниваем строки посимвольно на эквивалентность через equals, а содержимое данных строк одинаково.
👍415🔥5
Spring быстро (2022) True PDF

Java-программистам необходим фреймворк Spring. Этот невероятный инструмент универсален: вы можете разрабатывать как приложения для малого бизнеса, так и микросервисные архитектуры промышленного масштаба. Освоить Spring не так-то просто, но первый шаг сделать легко! Книга предназначена для Java-разработчиков, желающих создавать приложения на основе Spring. Информативные иллюстрации, понятные примеры, а также ясное и живое изложение Лауренциу Спилкэ позволят быстро овладеть необходимыми навыками. Вы научитесь планировать, разрабатывать и тестировать приложения. Благодаря акценту на наиболее важных функциях разберетесь в богатой экосистеме фреймворка Spring.
🔥20👍93
Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?

ArrayList это список, реализованный на основе массива, а LinkedList — это классический двусвязный список, основанный на объектах с ссылками между ними.

ArrayList:
• доступ к произвольному элементу по индексу за константное время O(1);
• доступ к элементам по значению за линейное время O(N);
• вставка в конец в среднем производится за константное время O(1);
• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (capacity) не изменяется);
• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.

LinkedList:
• на получение элемента по индексу или значению потребуется линейное время O(N);
• на добавление и удаление в начало или конец списка потребуется константное O(1);
• вставка или удаление в/из произвольного место константное O(1);
• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.

В целом, LinkedList в абсолютных величинах проигрывает ArrayList и по потребляемой памяти, и по скорости выполнения операций. LinkedList предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.
👍384🔥1
Техника «10 тестов в день» – одна из самых эффективных в изучении Java.

Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.

➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.

Подписывайтесь и качайте свои скиллы: @javatasks
👍7🔥1
Надежная, универсальная, быстрая и гибкая среда ведения журналов для Java.

Language: Java

💥Stars: 2731
📝Forks: 1211

https://github.com/qos-ch/logback
👍10
Какое худшее время работы метода contains() для элемента, который есть в LinkedList?

O(N). Время поиска элемента линейно пропорционально количеству элементов в списке.
👍20🔥1
Одинарные и двойные кавычки

Что ты ожидаешь в результате выполнения кода с картинки?

Казалось бы, строка должна возвращать «HaHa», но на самом деле это будет «Ha169».

Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды ('H' и 'a') в целые значения посредством расширения примитивных типов — получается 169.
👍304🔥4
Программируем на Java. 5-е межд. изд. (2023) PDF, ePUB

Неважно, кто вы – разработчик ПО или пользователь, в любом случае вы слышали о языке Java. В этой книге вы на конкретных примерах изучите основы Java, API, библиотеки классов, приемы и идиомы программирования. Особое внимание авторы уделяют построению реальных приложений.
Вы освоите средства управления ресурсами и исключениями, а также познакомитесь с новыми возможностями языка, появившимися в последних версиях Java.
• Программируйте на Java с использованием компилятора, интерпретатора и других инструментов.
• Исследуйте средства управления потоками и параллельной обработки.
• Изучайте обработку текста и мощные API.
• Создавайте приложения и службы на базе современных сетевых коммуникаций или веб-технологий.
👍14🔥32😁2
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?

При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().
👍28🔥3
Object[] vs custom Class

Код с Object абсолютно не читабельный, когда приходится работать с возвращаемым значением в другом месте.То есть, чтобы понять что же хранит в себе возвращаемое значение — нужно вернуться в класс вызова и читать комментарии к методу, если же, конечно, они есть, а если нет, вникать в код, что не очень эффективно. Собственно, я сам этим иногда грешу, когда очень спешу. С этим можно смириться, если это очень редко, но, все же, в таких ситуациях лучше создавать новый класс. Облегчите жизнь тем, кто придет после вас.
👍21🔥3😁1
Гид Java-разработчика. Проектно-ориентированный подход (2022) PDF

Этот гид позволит вам прокачать свои навыки объектно-ориентированного программирования и ознакомиться с его приемами на примере реальных проектов. Авторы представляют проектно-ориентированный подход к созданию программного обеспечения на Java, используя который можно стать эффективным разработчиком. Каждая глава книги сконцентрирована на определенном проекте, начинающемся как простое консольное приложение и вырастающем в полноценное приложение. Если вы знаете основы программирования на Java, то здесь вы изучите современные методы разработки программного обеспечения, которые позволят создавать актуальные, стабильные и поддерживаемые Java-приложения. Если вы недавно закончили университет или курсы программирования и ищете первую работу в сфере Java, то вам обязательно нужно купить эту книгу — она связывает между собой упражнения в программировании и реальную ежедневную работу профессионального инженера-разработчика.
👍162🔥2
Пустая коллекция вместо Null

Если ваша программа может вернуть коллекцию, которая не содержит никаких значений, убедитесь, что возвращается пустая коллекция, а не Null. Это сэкономит вам время на различные проверки и избавит от многих ошибок.
👍39🔥5
Java. Полное руководство, 12-е издание (2022) PDF, DJVU

В полностью обновленном с учетом версии Java SE 17 издании объясняется, как разрабатывать, компилировать, отлаживать и запускать программы на Java. Автор многочисленных бестселлеров по программированию Герберт Шилдт охватывает весь язык Java, включая его синтаксис, ключевые слова и фундаментальные принципы программирования. Вы также найдете здесь информацию об основных частях библиотеки Java API, таких как ввод-вывод, Collections Framework, библиотека потоков и утилиты параллелизма. Исследуются темы Swing, JavaBeans и сервлеты, а многочисленные примеры демонстрируют язык Java в действии. Конечно же, подробно обсуждаются недавние дополнения к языку Java, в том числе записи, запечатанные классы и выражения switch. Книга написана в ясном и четком стиле, который делает книги Шилдта выбором миллионов людей во всем мире.
👍306🔥4
Оцените количество памяти на хранение одного примитива типа 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 байта.
👍29🔥63
Проверка четности или нечетности числа без использования оператора %

Хотя этот трюк не намного лучше, чем использование оператора %, но иногда он все-таки более эффективен (с большими числами).
👍336🔥6