Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Почему String неизменяемый класс?

Есть несколько преимуществ в неизменности строк:

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

✔️ Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.

✔️ Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.

✔️ Строки используются classloader и неизменность обеспечивает правильность загрузки класса.

✔️ Поскольку строка неизменяемая, её hashCode() кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap т.к. его обработка происходит быстрее.

#java #string #immutable
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171
⌨️ Неизменяемые коллекции

Для получения неизменяемого варианта коллекции, в классе Collections есть соответствующие методы:

unmodifiableCollection
unmodifiableSequencedCollection
unmodifiableSet
unmodifiableSequencedSet
unmodifiableSortedSet
unmodifiableNavigableSet
unmodifiableList
unmodifiableMap
unmodifiableSequencedMap
unmodifiableSortedMap
unmodifiableNavigableMap

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

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


List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
List<String> unmodifiableList = Collections.unmodifiableList(list);
// Попытка изменить unmodifiableList приведет к UnsupportedOperationException
// unmodifiableList.remove("B");


#java #collections #immutable #unmodifiable
Please open Telegram to view this post
VIEW IN TELEGRAM
👌6👍4🔥2
⌨️ Immutable Collections (неизменяемые коллекции)

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

Вместо того чтобы создавать обычные коллекции и вручную делать их неизменяемыми с помощью метода Collections.unmodifiableList(), теперь можно легко создать неизменяемую коллекцию с помощью новых фабричных методов.

Пример создания неизменяемого списка:

List<String> names = List.of("Иван", "Мария", "Анна");


Пример создания неизменяемого множества:

Set<String> items = Set.of("Яблоко", "Груша", "Банан");


Попытка изменить такую коллекцию (например, names.add("Петр")) приведёт к исключению UnsupportedOperationException.

Использование неизменяемых коллекций помогает избежать ошибок, связанных с нежелательными изменениями, и улучшает безопасность данных.

#java #Immutable #Unmodifiable
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
💡 Immutable Objects: зачем они нужны и как их создавать

Неизменяемые объекты (Immutable Objects) — это объекты, состояние которых невозможно изменить после создания. Они широко используются в Java для обеспечения безопасности, удобства работы в многопоточной среде и упрощения кода.

🔍 Зачем использовать Immutable объекты?
1️⃣ Безопасность данных: их невозможно изменить, что предотвращает случайное или преднамеренное изменение состояния.
2️⃣ Многопоточность: безопасны для использования без синхронизации.
3️⃣ Простота: отсутствует необходимость отслеживать изменения или управлять состоянием.

📌 Как создать Immutable объект:
1️⃣ Сделайте класс final.
2️⃣ Объявите все поля private и final.
3️⃣ Исключите сеттеры.
4️⃣ Предоставьте только геттеры (без возможности изменения данных).
5️⃣ Обеспечьте глубокое копирование для изменяемых полей.

📌 Пример Immutable класса:

public final class ImmutablePerson {
private final String name;
private final int age;

public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public int getAge() {
return age;
}
}


🔗 Особенности реализации:
1️⃣ Класс ImmutablePerson нельзя унаследовать (final).
2️⃣ Поля name и age нельзя изменить после инициализации.
3️⃣ Нет методов для изменения полей (сеттеров).

📌 Работа с изменяемыми полями:
Если ваш класс содержит изменяемые объекты, возвращайте их копию или неизменяемую обёртку:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public final class ImmutableClass {
private final List<String> items;

public ImmutableClass(List<String> items) {
this.items = new ArrayList<>(items); // Создаём копию
}

public List<String> getItems() {
return Collections.unmodifiableList(items); // Возвращаем неизменяемую копию
}
}


💡В Java есть встроенные immutable классы, такие как String, Integer, LocalDate и другие. Используйте их, когда это возможно.

#Java #Immutable
👍92
Почему строки в Java неизменяемы (immutable)?

В Java объект String неизменяемый, что означает, что после создания его состояние нельзя изменить. Но зачем это нужно?

1️⃣ Безопасность: неизменяемые строки делают код более безопасным, особенно при работе с потоками или использованием строк в ключах коллекций (например, HashMap).

2️⃣ Производительность: строковые объекты кэшируются в пуле строк (String Pool), что позволяет Java эффективно управлять памятью.

3️⃣ Совместимость: неизменяемость строк облегчает работу с множеством библиотек, так как они не могут непреднамеренно изменить строку.

Пример:
String str = "Hello";
str.concat(" World");
System.out.println(str); // Hello


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

💡 Совет: если нужно часто изменять строки, используйте StringBuilder или StringBuffer.

#java #string #immutable
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
⌨️ Почему String неизменяемый класс?

Есть несколько преимуществ в неизменности строк:

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

✔️ Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.

✔️ Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.

✔️ Строки используются classloader и неизменность обеспечивает правильность загрузки класса.

✔️ Поскольку строка неизменяемая, её hashCode() кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap т.к. его обработка происходит быстрее.

#java #string #immutable
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍6