基本类型数组不能直接转为List,因泛型不支持原始类型;Arrays.asList(int[])将整个数组视为单个元素,返回长度为1的List;正确方式是用Stream.boxed().collect()或包装为Integer[]后调用asList。
基本类型数组不能直接转成,因为泛型不接受、这类原始类型——这是最常踩的坑。
为什么
不行
它会把整个
当作一个元素,生成
,而不是你想要的
。这是因为
的泛型参数是
,而
是一个对象,编译器不会自动拆箱或装箱。
错误现象:
输出
,不是
正确等价写法:
才返回长度为 3 的
注意:
返回的是固定大小的列表,不支持
、
用
转换(Java 8+ 推荐)
这是目前最干净、语义最明确的方式,能自动完成装箱,并返回可变的
。
、
同理,分别用
、
,再调
性能注意:小数组无感;大数组(百万级)时,
会产生大量临时
对象,GC 压力略增
第三方库如 Guava 或 Apache Commons(适合老项目)
如果项目已引入这些库,可以少写几行 Stream 流水线。
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
立即学习
“
Java免费学习笔记(深入)
”;
Guava:
—— 注意
返回的是
,但底层仍是原始数组封装,修改会影响原数组
Apache Commons Lang:
先转成
,再传给
兼容性提醒:Guava 的
在 JDK 17+ 某些模块配置下可能触发
,慎用于模块化强的环境
真正容易被忽略的是:转换后是否需要修改列表。如果只是遍历或只读,用
最轻量;如果后续要
或
,必须套一层
或用
,否则运行时报
。
ListintlongArrays.asList(int[])int[]ListListArrays.asList()T...int[]System.out.println(Arrays.asList(new int[]{1, 2, 3}).size())13Arrays.asList(new Integer[]{1, 2, 3})ListArrays.asList()add()remove()StreamArrayListint[] arr = {1, 2, 3};List list = Arrays.stream(arr).boxed().collect(Collectors.toList()); long[]double[]LongStreamDoubleStreamboxed()boxed()IntegerLists.newArrayList(Ints.asList(1, 2, 3))Ints.asList()ListArrayUtils.toObject(intArray)Integer[]Arrays.asList()Ints.asList()IllegalAccessErrorArrays.asList(包装后的数组)addremovenew ArrayList(...)Stream.collect()UnsupportedOperationException