Arrays.asList方法踩坑

Arrays.asList方法不会如期望地将基础类型的数组自动装箱并生成新的列表,如果想要将基础类型的数组自动装箱,可以考虑使用Guava包中提供的asList方法。如果确实需要创建只包含一个基础类型的数组为元素的列表,明确地使用Collections.singletonList方法来表达意图。List intArrayToInteger(int\[\] intArray) {

List <integer> List = Arrays.asList(intArray); // 编译错误,Arrays.asList方法返回值类型为List

return integerList;

}

List<Integer> intArrayToIntegerList2(int\[\] intArray) {

// 正确使用jdk自建的Arrays类

List<Integer> integerList = Arrays.stream(intArray).boxed().collect(Collectors.toList());

return integerList;

}

List<Integer> intArrayToIntegerList(int\[\] intArray) {

// 使用guava包中的com.google.common.primitives.Ints类

List<Integer> integerList = Ints.asList(intArray);

return integerList;

}

List<Integer> convertToIntArraySingleton(int\[\] intArray) {

// 如果确实需要创建只包含一个基础类型的数组为元素的列表,使用Collections.singletonList方法

List<int\[\]> intArraySingletonList = Collections.singletonList(intArray);

return intArraySingletonList;

}

尝试修改Arrays.asList方法返回的集合会抛出UnsupportedOperationException,这是由于Arrays.asList方法返回的集合是java.util.Arrays$ArrayList类,而非java.util.ArrayList类。

反例

void function(String\[\] strings) {

List<String> stringList = Arrays.asList(strings);

// 将会抛出UnsupportedOperationException

stringList.add("another string");

}

正例

void function(String\[\] strings) {

// 调用ArrayList的构建方法构建一个新的List

List<String> stringList = new ArrayList<>(Arrays.asList(strings));

stringList.add("another string");

}

相关推荐
戴为沐2 天前
Linux内存扩容指南
linux
zylyehuo2 天前
Linux 彻底且安全地删除文件
linux
用户805533698033 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297913 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Web3探索者5 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo5 天前
Linux系统中网线与USB网络共享冲突
linux
Sokach10156 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
AlfredZhao6 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3108 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏