Для получения неизменяемого варианта коллекции, в классе 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
👍10❤2🔥1
Работа с большими
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🔥5❤2
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
👍15❤2
Collections1️⃣
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
👍9❤1🔥1
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👍15❤6