⚔️ Java Battle:
На код-ревью часто можно увидеть, как эти два метода используют взаимозаменяемо. На первый взгляд, результат один - список элементов. Но под капотом это два совершенно разных зверя.
Давайте разберем, почему замена одного на другой может сломать ваш код.
1. Иллюзия неизменяемости (The Mutability Trap)
Это самое важное различие.
🔴
🔴
2. Отношение к
🔴
🔴
3. Связь с исходным массивом (Reference vs Copy)
Если вы создаете список из существующего массива:
🏁 Итог
🔴 Используйте
🔴 Используйте
#Java #CodeTips #InterviewQuestions #JavaCore
👉 @java_geek
List.of() vs Arrays.asList() - в чем разница?На код-ревью часто можно увидеть, как эти два метода используют взаимозаменяемо. На первый взгляд, результат один - список элементов. Но под капотом это два совершенно разных зверя.
Давайте разберем, почему замена одного на другой может сломать ваш код.
1. Иллюзия неизменяемости (The Mutability Trap)
Это самое важное различие.
List.of() (Java 9+): Создает по-настоящему неизменяемый список. Вы не можете ни добавить, ни удалить, ни изменить элемент.Arrays.asList() (Java 1.2+): Создает список фиксированного размера, который "обернут" вокруг массива. Вы не можете менять размер (add/remove), но можете заменять элементы!
var legacyList = Arrays.asList("A", "B");
var modernList = List.of("A", "B");
legacyList.set(0, "C"); // ✅ РАБОТАЕТ! Список теперь ["C", "B"]
modernList.set(0, "C"); // ❌ Ошибка: UnsupportedOperationException
legacyList.add("D"); // ❌ Ошибка (размер фиксирован)
modernList.add("D"); // ❌ Ошибка (полная иммутабельность)
2. Отношение к
nullArrays.asList: Разрешает null элементы.List.of: Враждебен к null. Если попытаетесь передать null, мгновенно получите NullPointerException. Это сделано специально, чтобы избежать ошибок в логике.3. Связь с исходным массивом (Reference vs Copy)
Если вы создаете список из существующего массива:
String[] arr = {"One", "Two"};
var list1 = Arrays.asList(arr);
var list2 = List.of(arr);
arr[0] = "Zero"; // Меняем исходный массив
System.out.println(list1); // ["Zero", "Two"] <- Изменился вслед за массивом!
System.out.println(list2); // ["One", "Two"] <- Остался прежним
Arrays.asList работает как "окно" (view) в массив. List.of создает защитную копию данных.🏁 Итог
List.of() в 99% случаев. Это безопаснее, быстрее и потребляет меньше памяти.Arrays.asList(), только если вам нужны null-ы или вы намеренно хотите, чтобы изменения в исходном массиве отражались в списке (редкий кейс).#Java #CodeTips #InterviewQuestions #JavaCore
👉 @java_geek
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2