Arrays.asList()使用避坑指南 - 看似简单,实则有坑
作为一个被 Arrays.asList() 坑过好几次的过来人,今天想跟大家好好聊聊这个方法。说实话,刚学 Java 的时候觉得这玩意儿超方便,但后来在生产环境踩了几次坑才发现,它真的没看起来那么简单。
目录
- 为什么需要 Arrays.asList()
- 基础用法 - 先来点简单的
- 三个致命的坑 - 真实案例
- 坑1: 不能添加删除元素
- 坑2: 基本类型数组的诡异行为
- 坑3: 修改 List 会影响原数组
- 正确的使用姿势
- 什么时候该用,什么时候不该用
- 替代方案对比
- 总结与建议
为什么需要 Arrays.asList()
在讲坑之前,先说说为什么会有这个方法。
我们都知道 Java 里有两种常用的数据结构:数组和 List。数组简单高效,但大小固定;List 灵活方便,但性能略差。有时候我们手头有个数组,但接下来要调用的方法却要求传 List 参数,怎么办?
最直接的想法:
String[] names = {"张三", "李四", "王五"};
List<String> nameList = new ArrayList<>();
for (String name : names) {nameList.add(name);
}
能用,但太啰嗦了。于是 JDK 提供了一个快捷方式:
List<String> nameList = Arrays.asList(names);
一行搞定!看起来很美好对吧?但是…
基础用法 - 先来点简单的
在讲坑之前,我们先看看它的基本用法。运行一下这段代码你就明白了。
// 用法1: 把数组转成List
String[] fruits = {"苹果", "香蕉", "橙子"};
List<String> fruitList = Arrays.asList(fruits);
System.out.println(fruitList); // [苹果, 香蕉, 橙子]// 用法2: 直接传入元素(更常用)
List<String> colors = Arrays.asList