【Java】如何优雅的将数组转换为List集合
# 【Java】如何优雅的将数组转换为 List 集合
# 第一种方式 (未必最佳): 使用 ArrayList.asList (strArray)
使用 Arrays 工具类 Arrays.asList (strArray) 方式,转换完成后,只能对 List 数组进行查改,不能增删,增删就会抛出 UnsupportedOperationException 异常
1 | import java.util.Arrays; |
添加数据报错:
1 | Exception in thread "main" java.lang.UnsupportedOperationException |
# 第二种方法 (支持增删查改):
通过 ArrayList 的构造器,将 Arrays.asList (strArray) 的返回值由 java.utilArrays.ArrayList 转为 java.util.ArrayList.
关键代码:ArrayList list = new ArrayList (Arrays.asList (strArray)) ;
1 | String[] str = {"fgx", "lzy"}; |
使用场景:需要在将数组转换为 List 后,对 List 进行增删改查操作,在 List 的数据量不大的情况下,可以使用。
# 第三种方式 (通过集合工具类 Collections.addAll () 方法 (最高效))
通过 Collections.addAll (arrayList, strArray) 方式转换,根据数组的长度创建一个长度相同的 List,然后通过 Collections.addAll () 方法,将数组中的元素转为二进制,然后添加到 List 中,这是最高效的方法。
1 | public static void Demo3() { |
# 第四种方式通过 JDK8 的 Stream 流将 3 总基本类型数组转为 List
如果 JDK 版本在 1.8 以上,使用流 stream 来将下列 3 种数组快速转为 List, 分别是 int [],long [],double [], 不支持 short [ ],byte [ ],char [] 在 JDK1.8 中暂不支持.
1 | int[] ints = {2, 34, 55, 22, 11}; |
TIPs: 为什么 int [] 不能直接转为 List, 而 Integer [] 可以转为 List, 而 Integer [] 就可以转为 List 了,因为 List 中的泛型必须是引用类型。
java 数组转 list 误区
一、不能把基本数据类型转化为列表
仔细观察可以发现 asList 接受的参数是一个泛型的变长参数,而基本数据类型是无法泛型化的,如下所示:
1 | public class App { |
这是因为把 int 类型的数组当参数了,所以转换后的列表就只包含一个 int [] 元素。
解决方案:
要想把基本数据类型的数组转化为其包装类型的 list,可以使用 guava 类库的工具方法,示例如下:
1 | int [] intArray = { 1 , 2 , 3 , 4 }; |
二、asList 方法返回的是数组的一个视图
视图意味着,对这个 list 的操作都会反映在原数组上,而且这个 list 是定长的,不支持 add、remove 等改变长度的方法。
1 | public class App { |
# 关于我
Brath 是一个热爱技术的 Java 程序猿,公众号「InterviewCoder」定期分享有趣有料的精品原创文章!
非常感谢各位人才能看到这里,原创不易,文章如果有帮助可以关注、点赞、分享或评论,这都是对我的莫大支持!