TGViewer
Channel Public Channel
Java Learning

Java Learning

@java_per_month

№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.me/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Subscribers
16.6K
Photos
1.6K
Videos
1
Links
1K

Showing posts older than #3485 · Back to latest

Older Posts 20 shown
Post #3484 2.7K
⚙️ Параллелизм в Java 8

В Java 8 было внесено несколько крупных изменений, улучшивших API параллелизма, включая метод newWorkStealingPool().

🗣️ Этот метод создает пул потоков, использующий алгоритм воровства работы, который может использовать доступные процессоры на желаемом уровне параллелизма.

➡️ Другие улучшения в API параллелизма включают:

• Новые методы для ConcurrentHashMap: forEach(), forEachEntry(), forEachValue(), reduce(), merge() и search().
• CompletableFuture может явно устанавливать свое значение и статус.

Java Learning 👩‍💻
  • 👍 5
  • 😢 2
Post #3482 2.79K
➡️ Maven

Maven — один из трёх самых популярных инструментов для сборки проектов на Java. Он отвечает за компиляцию, создание jar-файлов (Java-архивов), создание дистрибутива программы, генерацию документации.

🗣️ Maven — просто отличная штука, хоть поначалу и не очень понятная. Если вы никогда не использовали Maven раньше, вы многое потеряли.

🔗 Ссылочка на доку

Java Learning 👩‍💻
  • 👍 8
  • ❤‍🔥 1
Post #3480 2.58K
➡️ Использование Iterator для перебора List

В Java есть несколько способов перебрать список: цикл for с индексом, расширенный for и Iterator. Раньше я использовал цикл for с методом get(), как показано ниже:

for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
}


🗣️ Этот метод работает для ArrayList, но если список — это LinkedList или другая реализация без поддержки случайного доступа, время выполнения увеличится до O(N^2), потому что get() для LinkedList имеет O(n) сложность.

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


✔️ Лучше использовать Iterator, который является стандартным способом перебора списка:

Iterator<String> itr = list.iterator();

while (itr.hasNext()) {
String name = itr.next();
}


Это безопаснее и предотвращает непредсказуемое поведение.

Java Learning 👩‍💻
  • 👍 10
Post #3479 2.46K
➡️ Обработка CloneNotSupportedException и возврат экземпляра подкласса

Несмотря на критику функции клонирования объектов в Java, если вам нужно реализовать метод clone(), вот несколько лучших практик для упрощения задачи:

public Course clone() {
Course c = null;
try {
c = (Course)super.clone();
} catch (CloneNotSupportedException e) {} // Не произойдет

return c;
}


🗣️ Этот код использует тот факт, что метод clone() не вызовет CloneNotSupportedException, если класс реализует интерфейс Cloneable. Возврат подкласса называется ковариантным переопределением методов и доступен с Java 5, что позволяет избежать приведения типа на стороне клиента:

Course javaBeginners = new Course("Java", 100, 10);
Course clone = javaBeginners.clone();


Ранее, например, с классом Date, нужно было явно приводить результат метода clone():

Date d = new Date();
Date clone = (Date) d.clone();


Java Learning 👩‍💻
  • 👍 5
  • ❤‍🔥 1
Post #3477 2.82K
👀 Datafaker

Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных.

🗣️ Это может быть очень полезно при генерации тестовых данных для заполнения базы данных, генерации данных для стресс‑теста или анонимизации данных из производственных сервисов. Давайте включим его в наши зависимости.

🔗 Ссылочка на доку

Java Learning 👩‍💻
  • 👍 13
  • 🔥 5
  • ❤‍🔥 1
Post #3476 2.71K
👀 Случайные целочисленные числа

Теперь более трудное задание. Не читайте решение. Посмотрите сможете ли вы найти
ответ самостоятельно. Когда я запущу следующую программу:

for (int i = 0; i < 10; i++) {
System.out.println((Integer) i);
}


Иногда я получаю следующий вывод:

92
221
45
48
236
183
39
193
33
84


➡️ Но как такое вообще возможно? Ответ в кроется в переопределении JDK кеша Integer через рефлексию, и затем в использовании auto-boxing и auto-unboxing.

Java Learning 👩‍💻
  • 👍 6
  • 😱 3
  • ❤‍🔥 2
Post #3474 2.63K
⚙️ Оптимизация сборщика мусора с помощью -XX:+UseG1GC

Java предоставляет множество возможностей для оптимизации производительности приложений.

✔️ Одной из таких возможностей является использование современного сборщика мусора G1 (Garbage First), который улучшает работу приложений с большим объемом данных и снижает задержки.

➡️ Чтобы включить использование G1GC, необходимо добавить флаг -XX:+UseG1GC при запуске Java-приложения:

java -XX:+UseG1GC G1GCExample


Java Learning 👩‍💻
  • 👍 10
Post #3472 2.58K
❓ Как правильно использовать утилитарные классы

Утилитарные классы предназначены не для создания объектов, а для предоставления статических методов для выполнения общих функций. Если вы пишете слишком много таких классов, пересмотрите свой подход к проектированию кода.

Однако иногда они необходимы, например, для реализации внутренних предметно-ориентированных языков (DSL) в Java. В таких случаях часто отступают от принципов ООП, чтобы сделать синтаксис короче.

➡️ Если вам все-таки нужно создать утилитарный класс, придерживайтесь следующих рекомендаций:

• Сделайте конструктор приватным, чтобы класс нельзя было создать.
• Сделайте класс final, чтобы его нельзя было наследовать.
• Объединяйте методы в утилитарные классы по функциональности. Избегайте общих названий, таких как MvcUtils или CommonUtils.

Java Learning 👩‍💻
  • 👍 8
  • ❤‍🔥 2
Post #3471 2.78K
❓ Парадокс Comparator’а

Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:

public class ByScoreComparator implements Comparator<User> {

@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}


➡️ Главная проблема — понять, от чего отнимать, чтобы порядок был правильным. Правильный ответ с первого раза получается редко, и часто мы замечаем ошибку уже после запуска кода.

Теперь это не нужно. Можно использовать ссылки на методы:

Comparator<User> comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List<User> hList = ...;
hList.sort(comparator);


🗣️ Такой подход упрощает создание компараторов.

Java Learning 👩‍💻
  • 👍 10
  • 🔥 4
  • ❤‍🔥 2
Post #3469 2.95K
➡️ Как объединить два списка в Java?

Этот код демонстрирует, как объединить два списка list1 и list2 в Java, создав новый список mergedList, который содержит все элементы из обоих исходных списков. В результате выполнения кода будет напечатан объединенный список.

🗣️ Этот подход часто используется на практике при работе с коллекциями в Java.

Java Learning 👩‍💻
  • 👍 10
Post #3468 3.09K
⏳ Использование LocalDate и DateTimeFormatter для работы с датами

LocalDate и DateTimeFormatter предоставляют удобные и безопасные методы для работы с датами в Java.

🗣️ Этот подход упрощает задачи форматирования и парсинга дат, что делает код более читаемым и менее подверженным ошибкам.

Java Learning 👩‍💻
  • 👍 13
Post #3467 3.17K
➡️ Фабричный метод коллекции

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

Коллекции также используются для сортировки, поиска и перебора объектов, что упрощает жизнь программиста. Он предоставляет несколько базовых интерфейсов, таких как List, Set, Map и т. д., а также множество реализаций.

Традиционный способ создания коллекций и карт может показаться многим разработчикам многословным.

👀 Вот почему в Java 9 появилось несколько очень кратких фабричных методов.

Java Learning 👩‍💻
  • 👍 6
  • ❤‍🔥 1
Post #3466 3.22K
➡️ Использование Optional для работы с потенциально null значениями

Использование Optional позволяет более безопасно работать с потенциально null значениями в Java.

🗣️ Этот подход помогает предотвратить распространенные ошибки, такие как NullPointerException, и делает код более читаемым и надежным.

Java Learning 👩‍💻
  • 👍 6
  • ❤‍🔥 1
Post #3464 3K
✔️ Использование Collectors.teeing для объединения потоков

Java 12 представила новый метод Collectors.teeing, который позволяет объединить результаты двух различных коллекторов в один итоговый результат.

🗣️ Эта возможность значительно упрощает обработку сложных потоков данных.

Java Learning 👩‍💻
  • 👍 5
  • ❤‍🔥 2
  • 🔥 2
Post #3463 3.42K
➡️ Мощь статических методов: Использование методов интерфейсов

✔️ В Java 8 была введена возможность определения статических методов в интерфейсах, что открыло новые возможности для создания удобных и мощных утилитарных функций прямо в интерфейсах.

🗣В интерфейсе ListUtils определен статический метод max, который находит максимальный элемент в коллекции.

🗣В методе main мы вызываем статический метод max из интерфейса ListUtils, передавая ему список чисел.

🗣Мы выводим найденное максимальное число на экран.

Java Learning 👩‍💻
  • 👍 8
Post #3461 3.07K
🪄 Магия сопоставления шаблонов: Switch Expressions

ℹ️ Switch Expressions позволяет писать более компактный и выразительный код при использовании оператора switch.

Java Learning 👩‍💻
  • 👍 10
  • ❤‍🔥 1
Post #3460 3.38K
🔥 Pattern Matching для instanceof

В Java 14 был представлен Pattern Matching для оператора instanceof. Эта возможность упрощает и делает более читабельным код, который проверяет типы объектов и затем приводит их к этим типам.

✔️ Используйте эту фишку для написания более чистого и читаемого кода, избегая лишних явных приведений типов

Java Learning 👩‍💻
  • 👍 16
  • 🎄 1
Post #3459 3.45K
➡️ Sealed Classes в Java

Sealed classes позволяют разработчикам ограничивать, какие классы могут наследоваться от конкретного класса или реализовывать интерфейс.

🗣️ Это полезно для создания более предсказуемой и контролируемой иерархии классов.

Java Learning 👩‍💻
  • 👍 12
Post #3458 3.71K
✔️ Как сделать ваш код чище с Records

Records — это новый тип классов в Java, который значительно упрощает создание классов, предназначенных для хранения неизменяемых данных.

🗣️ Они автоматически предоставляют стандартные методы, такие как equals(), hashCode() и toString(), что делает код более чистым и менее многословным.

Java Learning 👩‍💻
  • 👍 8
  • 😁 1
  • 😢 1
Post #3457 3.66K
🔗 Объединение строк с помощью String.join

Часто возникает необходимость объединять несколько строк в одну, используя определенный разделитель.

🗣️ До Java 8 это обычно делалось с помощью цикла и объекта StringBuilder. С появлением метода String.join, эта задача стала намного проще и лаконичнее.

Использование метода String.join значительно упрощает задачу объединения строк с разделителем, делая код более читаемым и сокращая количество кода, которое нужно написать и поддерживать.


Java Learning 👩‍💻
  • 👍 8
  • 🔥 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →