👍6🎄3
Использование списка
List для проверки наличия элемента приводит к линейной сложности O(n), что делает такую операцию медленной для больших наборов данных.Set, который обеспечивает время выполнения O(1) для операций поиска.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥1
Метод
MethodHandle.invokeExact() из пакета java.lang.invoke позволяет вызывать метод или конструктор через ссылку MethodHandle. Это мощный инструмент для динамического вызова методов с высокой производительностью.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Метод
Stream.generate() используется для создания бесконечного потока элементов, генерируемых функцией. Это полезно для создания потоков случайных данных, шаблонов или повторяющихся значений.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Как работают захваты переменных (
variable capture) в лямбда-выражениях Java, и какие ограничения на них накладываются?Ответ
Это ограничение связано с тем, что лямбды могут выполняться в другой потоковой среде, и изменение переменной вне лямбды может привести к непредсказуемым результатам.
Пример использования
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
int base = 10;
Consumer<Integer> multiplier = value -> {
System.out.println(value * base); // Использование захваченной переменной
};
multiplier.accept(5); // Вывод: 50
// base = 20; // Ошибка компиляции: переменная должна быть effectively final
}
}
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🎄1
Метод
MethodHandles.privateLookupIn позволяет получить доступ к приватным методам, полям и конструкторам класса через MethodHandle. Это мощный и редкий инструмент для работы с закрытыми членами классов.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Метод
ManagementFactory.getRuntimeMXBean() предоставляет доступ к информации о времени выполнения Java-программы, включая аргументы командной строки, идентификатор процесса (PID) и время запуска. Это полезно для мониторинга и диагностики приложений.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Pattern Matching for switch из позволяет использовать шаблоны для более гибкого и читаемого сопоставления значений в операторе
switch. Это значительно упрощает работу с различными типами данных и структурами.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15😢1🎄1
Пояснение
В HashMap ключи уникальны. При добавлении нового значения с тем же ключом ("a"), старое значение (1) заменяется на новое (3). Поэтому map.get("a") возвращает 3, а map.get("b") возвращает 2. Код компилируется и выполняется корректно.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
👍6
Метод
ByteArrayOutputStream.writeTo() позволяет записывать содержимое байтового массива (ByteArrayOutputStream) напрямую в другой выходной поток (OutputStream). Это удобно, когда нужно перенаправить данные, например, в файл или сетевой сокет, без промежуточного копирования.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Как работает JVM String Deduplication, и как оно оптимизирует использование памяти?
Ответ
Обычно, даже если строки идентичны, они хранятся как отдельные объекты в куче. Deduplication позволяет JVM находить дубликаты и заменять их ссылками на уже существующие строки, уменьшая потребление памяти.
Пример использования
import java.util.ArrayList;
import java.util.List;
public class StringDeduplicationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for (int i = 0; i < 1_000_000; i++) {
list.add(("String_" + (i % 100)).intern()); // Используем String.intern() для принудительного объединения
}
System.out.println("Генерация завершена");
}
}
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
String вместо StringBuilder при конкатенации в циклеВ Java строки (
String) неизменяемы. При каждой конкатенации через + создаётся новый объект, что приводит к избыточным затратам памяти и снижает производительность, особенно в циклах.StringBuilder, который изменяем и работает быстрее при частых операциях с текстом.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🎄1
Метод
Pattern.asMatchPredicate(), добавленный в Java 11, позволяет преобразовать регулярное выражение в предикат, который можно использовать для фильтрации потоков или проверки строк на полное совпадение с шаблоном.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1🎄1
Метод
ProcessHandle.info() позволяет получать информацию о запущенных процессах в системе, таких как аргументы командной строки, время запуска и использование ресурсов. Это полезно для мониторинга процессов в Java-приложениях.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Пояснение
Абстрактный класс Animal содержит абстрактный метод makeSound() и обычный метод sleep(). Класс Dog наследует Animal и реализует makeSound(). При вызове myDog.makeSound(), выполняется переопределённый метод Woof, а затем вызывается унаследованный метод sleep(), который выводит Sleeping.... Код компилируется и выполняется корректно.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
👍6
Метод
Files.mismatch(), добавленный в Java 12, позволяет сравнить два файла и найти позицию первого несовпадающего байта. Если файлы идентичны, метод возвращает -1. Это полезно для проверки целостности данных или сравнения файлов.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤🔥2
Метод
LockSupport.park() позволяет приостановить выполнение потока без использования synchronized или wait(). Это полезно для низкоуровневой синхронизации потоков.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7