
- Главная
- Каталог
- Интернет технологии
- Java | Фишки и трюки
Java | Фишки и трюки
Аудитория канала - начинающие или опытные Java программисты. Канал о разработке приложений на Java, в том числе написание бэкенд и web-приложений. Рассматриваются фишки и трюки при программировании на Java.
Статистика канала
StringBuilder и StringBuffer
И StringBuilder, и StringBuffer используются для работы со строками, но между ними есть важные отличия.
StringBuilder:
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb); // Hello World{}
StringBuffer:
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb); // Hello World{}
StringBuilder для лучшей производительности.
#java #stringbuilder #stringbufferdeepToString из класса Arrays используется для создания строкового представления многомерных массивов (например, массивов массивов). Он обходит каждый уровень вложенности массива и выводит его элементы в виде строки. Это удобно для работы с многомерными массивами, так как стандартный метод toString не раскрывает их структуру.
Пример использования:
int[][] array = {{1, 2, 3}, {4, 5, 6}};
System.out.println(Arrays.deepToString(array));
// [[1, 2, 3], [4, 5, 6]]
{}
Этот метод работает рекурсивно, обеспечивая полное отображение структуры массива любой вложенности.
#java #Arrays #deepToStringvolatile и как оно работает?
Ключевое слово volatile в Java используется для переменных, к которым обращаются несколько потоков. Оно гарантирует, что изменения переменной одним потоком будут видны другим.
class SharedObject {
volatile int count = 0;
}{}
volatile не гарантирует атомарность операций. Для этого используйте synchronized или классы из java.util.concurrent.
#java #volatile #multithreadingnull
Возвращение пустых коллекций вместо null-это рекомендуемый подход для методов, возвращающих коллекции. Он упрощает обработку данных, предотвращает ошибки и делает код более предсказуемым.
public class CacheService {
private final Map<String, List<Object>> cache = new ConcurrentHashMap<>();
public List<Object> getCachedValues(String key) {
return cache.getOrDefault(key, Collections.emptyList());
}
public void addToCache(String key, Object value) {
cache.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}
}{}
<?>
В Java <?> называется неограниченным wildcard. Он обозначает, что параметр типа может быть любым, то есть неизвестным на этапе компиляции. Это удобно, когда метод или класс работают с обобщёнными типами, но конкретный тип элемента не важен.
Например, выражение List<?> означает список, элементы которого могут быть любого типа. Такой подход позволяет писать более универсальный и гибкий код, но при этом накладывает ограничения: мы не можем добавлять новые элементы в коллекцию, поскольку компилятор не знает конкретный тип элементов, чтобы обеспечить безопасность типов.
import java.util.List;
public class WildcardExample {
public static void printList(List<?> list) {
for (Object element : list) { // Элементы можно читать как Object
System.out.println(element);
}
}
public static void main(String[] args) {
List<Integer> intList = List.of(1, 2, 3);
List<String> strList = List.of("A", "B", "C");
printList(intList); // Вывод: 1 2 3
printList(strList); // Вывод: A B C
}
}{}
Здесь List<?> позволяет передавать любой тип списка, но мы можем безопасно читать только как Object.
public static void addElement(List<?> list) {
// list.add("Hello"); // Ошибка компиляции!
}{}
#java #wildcardequals() и hashCode(). Ошибся и HashMap или HashSet начинают вести себя "магически" (читай: ломаются).
📦 Проблема на практике
Set<User> users = new HashSet<>();
users.add(new User("Alex"));
System.out.println(users.contains(new User("Alex"))); // ❌ false{}
🤨 Почему false, если значения одинаковые?
⚠️ Причина
По умолчанию equals() сравнивает ссылки (==), а не содержимое.
✅ Правильная реализация
public class User {
private String name;
// equals
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User user = (User) o;
return Objects.equals(name, user.name);
}
// hashCode
@Override
public int hashCode() {
return Objects.hash(name);
}
}{}
🔥 Почему важны ОБА метода?
Если переопределить только equals():
users.add(new User("Alex"));
users.contains(new User("Alex")); // ❌ всё ещё может быть false{}
👉 Потому что HashSet сначала смотрит на hashCode(), а потом уже на equals().
⚡ Контракт, который нельзя нарушать
1. Если equals() возвращает true → hashCode() обязан быть одинаковым
2. Если hashCode() одинаковый → equals() может быть как true, так и false
💣 Классическая ошибка
Изменяем объект после добавления в HashSet:
User user = new User("Alex");
users.add(user);
user.setName("Bob");
users.contains(user); // ❌ может вернуть false{}
👉 Объект "потерялся" в коллекции
🧠 Как избежать проблем
* Делай объекты immutable (final поля)
* Используй record (Java 16+):
public record User(String name) {}{}
👉 equals() и hashCode() генерируются автоматически и корректно
📌 Вывод
Коллекции в Java работают быстро благодаря hashCode(),
но требуют строгого соблюдения контракта.
Нарушишь - получишь баги, которые очень сложно отловить 🐛Отзывы канала
всего 11 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Java | Фишки и трюки — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 6.9K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 17.9, количество отзывов – 11, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 2237.76 ₽, а за 86 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий