Pascal4eg / Java

 Java | Фишки и трюки

Реализация стека с помощью интерфейса Deque

Deque<Integer> stack = new LinkedList<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.pop()); // 3
System.out.println(stack.pop()); // 2
System.out.println(stack.pop()); // 1

Deque (Double-ended queue) представляет собой интерфейс, который расширяет функциональность обычной очереди (Queue). Он позволяет добавлять и удалять элементы как в начале, так и в конце очереди. Deque является частью Java Collections Framework и введен в Java 6.

...

Читать дальше

Принцип программирования YAGNI — «Вам это не понадобится»

Cледование данному принципу заключается в том, что возможности, которые не описаны в требованиях к системе, просто не должны реализовываться. Это позволяет вести разработку, руководствуясь экономическими критериями: Заказчик не должен оплачивать ненужные ему функции, а разработчики не должны тратить своё оплачиваемое время на реализацию того, что не требуется.

Основная проблема, которую решает принцип YAGNI — это устранение тяги программистов к излишней абстракции, к экспериментам «из интереса» и к реализации функционала, который сейчас не нужен, но, по мнению разработчика, может вскоре понадобиться или просто будет полезен, хотя в реальности такого часто не происходит.

...

Читать дальше

JDBC, Java DataBase Connectivity

JDBC, Java DataBase Connectivity (соединение с базами данных на Java) — промышленный стандарт взаимодействия Java-приложений с различными СУБД. Реализован в виде пакета java.sql, входящего в состав Java SE.

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

Преимущества JDBC:

...

Читать дальше

Launch4j

Launch4j — это кроссплатформенный инструмент для упаковки Java-приложений, распространяемых в виде jar-файлов, в облегченные собственные исполняемые файлы Windows, Linux и Mac OS X. Исполняемый файл можно настроить для поиска определенной версии JRE или использования встроенной версии, а также можно установить параметры времени выполнения, такие как начальный/максимальный размер кучи.

Некоторые особенности:

...

Читать дальше

Spring. Query Methods

Spring Framework предоставляет множество способов взаимодействия с базой данных, и одним из основных инструментов для этого являются Query Methods. Query Methods предоставляют простой способ создания запросов к базе данных на основе именованных методов в интерфейсах репозиториев.

Пример репозитория, если у нас есть сущность User с полями username и email:

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByUsername(String username);

    List<User> findByUsernameAndEmail(String username, String email);
}

...

Читать дальше

Метод Arrays.fill() для инициализации массива

Класс java.util.Arrays имеет несколько методов с именем fill(), которые принимают разные типы аргументов и заполняют весь массив одним и тем же значением:

long array[] = new long[5];
Arrays.fill(array, 30);

У метода также есть несколько альтернатив, которые устанавливают диапазон массива в определенное значение:

int array[] = new int[5];
Arrays.fill(array, 0, 3, -50);

Обратите внимание, что метод принимает массив, индекс первого элемента, индекс последнего элемента (не включительно) и значение.

Читать дальше

Что такое «конструктор по умолчанию»?

Если у какого-либо класса не определить конструктор, то компилятор сгенерирует конструктор без аргументов - так называемый «конструктор по умолчанию».

public ClassName() {}

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

Читать дальше

Почему строка является популярным ключом в HashMap в Java?

Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа HashMap они будут обрабатываться быстрее.

Читать дальше

Почему char[] предпочтительнее String для хранения пароля?

С момента создания строка остаётся в пуле, до тех пор, пока не будет удалена сборщиком мусора. Поэтому, даже после окончания использования пароля, он некоторое время продолжает оставаться доступным в памяти и способа избежать этого не существует. Это представляет определённый риск для безопасности, поскольку кто-либо, имеющий доступ к памяти сможет найти пароль в виде текста. В случае использования массива символов для хранения пароля имеется возможность очистить его сразу по окончанию работы с паролем, позволяя избежать риска безопасности, свойственного строке.

Читать дальше

Метод containsAll()

List<String> list = List.of("Jack", "Bill", "Dave");
List<String> subList = List.of("Dave", "Bill");
System.out.println(list.containsAll(subList)); // true

Метод containsAll() интерфейса Collection проверяет входят ли в коллекцию все элементы переданной в параметре коллекции.

...

Читать дальше