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");

}

相关推荐
无忧.芙桃6 分钟前
进程之环境变量
linux·运维·服务器
Wanliang Li8 分钟前
Linux驱动——input子系统
linux·驱动开发·input
feng_you_ying_li10 分钟前
liunx之make/makefile的使用
linux
默|笙27 分钟前
【Linux】线程概念与控制(4)_线程封装
linux
仍然探索未知中33 分钟前
【Linux内核源码分析】内核数据结构
linux·数据结构
chxii35 分钟前
linux 下用 acme.sh 搞定 Nginx 免费 SSL 证书自动续期(下) 对于acme.sh命令安装详解
linux·运维·服务器
Bert.Cai1 小时前
Linux more命令详解
linux·运维
minji...1 小时前
Linux 多线程(四)线程等待,线程分离,线程管理,C++多线程,pthread库
linux·运维·开发语言·网络·c++·算法
ZGUIZ1 小时前
Ubuntu 25.10 无法外接显示器解决方案
linux·运维·ubuntu
QJtDK1R5a1 小时前
V4L2 vs GStreamer vs FFmpeg:Linux多媒体处理的三个层级
linux·运维·ffmpeg