如何准确地向 Long 类型列表追加新元素?
- 内容介绍
- 相关推荐
本文共计649个文字,预计阅读时间需要3分钟。
在Java中,使用`List.of()`创建的是不可变列表,因此不能直接调用`add()`方法,否则会抛出`UnsupportedOperationException`。若需要可变列表,应改用`ArrayList`等可变集合实现。同时,注意命名规范和代码风格。
在 Java 中,List.of(E...) 是 Java 9 引入的便捷工厂方法,用于创建不可修改(unmodifiable) 的不可变列表。正如官方文档明确指出:“Returns an unmodifiable list”,这意味着一旦创建,其内容无法通过 add()、remove()、set() 等方法变更——任何修改尝试都会触发 UnsupportedOperationException。
你遇到的错误正是源于此:
List<Long> longList = List.of(3L); // ✅ 创建不可变列表 longList.add(2L); // ❌ 抛出 UnsupportedOperationException
✅ 正确做法:使用可变列表容器
要支持动态增删元素,必须使用可变(mutable)的 List 实现类,最常用的是 ArrayList。以下是两种推荐写法:
方式一:基于 List.of() 初始化后转为 ArrayList
import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { // 先创建不可变列表,再包装为可变 ArrayList List<Long> longList = new ArrayList<>(List.of(3L)); longList.add(2L); // ✅ 成功添加 System.out.println(longList); // 输出: [3, 2] } }
方式二:直接初始化空 ArrayList 并逐个添加
import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List<Long> longList = new ArrayList<>(); longList.add(3L); longList.add(2L); System.out.println(longList); // 输出: [3, 2] } }
⚠️ 其他重要注意事项
- 命名规范:Java 变量名应遵循 lowerCamelCase(小驼峰),如 longList,而非 LongList(后者易被误认为类名);
- 类型安全:List<Long> 明确声明泛型类型,确保编译期类型检查,避免装箱/拆箱意外;
- 性能考量:若初始容量已知,建议使用 new ArrayList<>(initialCapacity) 避免多次扩容。
✅ 总结
| 场景 | 推荐方式 |
|---|---|
| 需要后续修改(增/删/改) | 使用 new ArrayList<>(...) 或 new ArrayList<>() |
| 仅读取、不修改(如配置常量) | 可继续使用 List.of(...),兼顾简洁与安全性 |
牢记:List.of() = 不可变;可变操作 → 必须选用 ArrayList、LinkedList 等可变实现类。
本文共计649个文字,预计阅读时间需要3分钟。
在Java中,使用`List.of()`创建的是不可变列表,因此不能直接调用`add()`方法,否则会抛出`UnsupportedOperationException`。若需要可变列表,应改用`ArrayList`等可变集合实现。同时,注意命名规范和代码风格。
在 Java 中,List.of(E...) 是 Java 9 引入的便捷工厂方法,用于创建不可修改(unmodifiable) 的不可变列表。正如官方文档明确指出:“Returns an unmodifiable list”,这意味着一旦创建,其内容无法通过 add()、remove()、set() 等方法变更——任何修改尝试都会触发 UnsupportedOperationException。
你遇到的错误正是源于此:
List<Long> longList = List.of(3L); // ✅ 创建不可变列表 longList.add(2L); // ❌ 抛出 UnsupportedOperationException
✅ 正确做法:使用可变列表容器
要支持动态增删元素,必须使用可变(mutable)的 List 实现类,最常用的是 ArrayList。以下是两种推荐写法:
方式一:基于 List.of() 初始化后转为 ArrayList
import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { // 先创建不可变列表,再包装为可变 ArrayList List<Long> longList = new ArrayList<>(List.of(3L)); longList.add(2L); // ✅ 成功添加 System.out.println(longList); // 输出: [3, 2] } }
方式二:直接初始化空 ArrayList 并逐个添加
import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List<Long> longList = new ArrayList<>(); longList.add(3L); longList.add(2L); System.out.println(longList); // 输出: [3, 2] } }
⚠️ 其他重要注意事项
- 命名规范:Java 变量名应遵循 lowerCamelCase(小驼峰),如 longList,而非 LongList(后者易被误认为类名);
- 类型安全:List<Long> 明确声明泛型类型,确保编译期类型检查,避免装箱/拆箱意外;
- 性能考量:若初始容量已知,建议使用 new ArrayList<>(initialCapacity) 避免多次扩容。
✅ 总结
| 场景 | 推荐方式 |
|---|---|
| 需要后续修改(增/删/改) | 使用 new ArrayList<>(...) 或 new ArrayList<>() |
| 仅读取、不修改(如配置常量) | 可继续使用 List.of(...),兼顾简洁与安全性 |
牢记:List.of() = 不可变;可变操作 → 必须选用 ArrayList、LinkedList 等可变实现类。

