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

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

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Неизменяемые коллекции

Для получения неизменяемого варианта коллекции, в классе 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
🔍 Разница между TreeSet и HashSet

Оба класса реализуют Set, но у них разные свойства:

HashSet – хранит элементы в случайном порядке, обеспечивает быстрые операции add() и remove().
TreeSet – хранит элементы в отсортированном порядке, но работает медленнее.

✔️ Пример:

Set<Integer> hashSet = new HashSet<>(Set.of(3, 1, 2)); // [3, 1, 2] (порядок может быть разным)
Set<Integer> treeSet = new TreeSet<>(Set.of(3, 1, 2)); // [1, 2, 3] (отсортировано)


💡 Совет: Используйте HashSet для быстрого доступа и TreeSet, если важен порядок элементов.

#java #treeset #hashset #collections
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
⚡️ Оптимизация работы с большими коллекциями в Java

Работа с большими List и Map в Java может привести к высоким затратам памяти и снижению производительности. Как этого избежать?

Ошибка: использование ArrayList без задания начального размера

List<String> list = new ArrayList<>(); // По умолчанию – 10 элементов
for (int i = 0; i < 1000000; i++) {
list.add("data");
}


➡️ Решение: укажите размер сразу, если он известен

List<String> list = new ArrayList<>(1000000);


Ошибка: HashMap без настройки initialCapacity и loadFactor

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

➡️ Решение: настройка параметров

Map<String, String> map = new HashMap<>(1000000, 0.9f);


Ошибка: использование LinkedList вместо ArrayList для поиска

List<String> list = new LinkedList<>();
list.get(5000); // O(n)


➡️ Решение: используйте ArrayList, если часто выполняете get()

💡 Совет: Профилируйте код с -XX:+PrintGCDetails и jcmd GC.heap_info, чтобы следить за лишними выделениями памяти.

#java #collections #performance
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥52
🔗 Разница между List, Set и Map

Эти три интерфейса из java.util используются для хранения коллекций данных, но имеют разные свойства:

List – упорядоченная коллекция, допускает дубликаты (ArrayList, LinkedList).

Set – уникальные элементы, порядок может быть произвольным (HashSet, TreeSet).

Map – хранит пары "ключ-значение" (HashMap, TreeMap).

✔️ Пример:


List<String> list = new ArrayList<>(List.of("A", "B", "A")); // [A, B, A]
Set<String> set = new HashSet<>(Set.of("A", "B", "A")); // [A, B]
Map<Integer, String> map = new HashMap<>(Map.of(1, "One", 2, "Two")); // {1=One, 2=Two}


💡 Совет: Используйте List, если важен порядок и дубликаты, Set – если важна уникальность, Map – для работы с парами ключ-значение.

#java #collections #list #set #map
Please open Telegram to view this post
VIEW IN TELEGRAM
👍152
⌨️ Полезные методы Collections

1️⃣ Collections.sort() — сортировка списка

import java.util.*;

public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Вика", "Андрей", "Сергей");
Collections.sort(names);
System.out.println(names); // [Андрей, Вика, Сергей]
}
}

📌 Работает с Comparable. Можно передавать Comparator для кастомной сортировки.


2️⃣ Collections.reverse() — реверс списка

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Collections.reverse(numbers);
System.out.println(numbers); // [5, 4, 3, 2, 1]



3️⃣ Collections.shuffle() — перемешивание элементов

List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
Collections.shuffle(nums);
System.out.println(nums); // случайный порядок, например [3, 1, 5, 2, 4]

💡 Полезно для перемешивания карт, вопросов в викторине и т. д.

#java #Collections #sort #reverse #shuffle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91🔥1
⌨️ Полезные методы Collections

1️⃣ Collections.min() и Collections.max()

List<Integer> list = Arrays.asList(10, 5, 30, 7);
System.out.println(Collections.min(list)); // 5
System.out.println(Collections.max(list)); // 30



2️⃣ Collections.fill() — заполнение списка одним значением

List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
Collections.fill(list, "X");
System.out.println(list); // [X, X, X]



3️⃣ Collections.replaceAll() — замена значений

List<String> list = new ArrayList<>(Arrays.asList("яблоко", "груша", "яблоко"));
Collections.replaceAll(list, "яблоко", "банан");
System.out.println(list); // [банан, груша, банан]



4️⃣ Collections.frequency() — подсчет вхождений элемента

List<String> list = Arrays.asList("A", "B", "A", "C", "A");
int count = Collections.frequency(list, "A");
System.out.println(count); // 3


#java #Collections #min #max #fill #replaceAll #frequency
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍156