概括
主要记录我在开发中使用Arrays.asList然后出现的问题,仅供参考。
为什么使用Arrays.asList?
起初是因为我在进行数据的类型转换的时候,需要把一些数据装成List,就直接突方便使用了这个api。
遇见了什么问题?
第一个问题
在我对基本数据类型的数组进行转换的时候,在遍历的过程中,一直报错,拿不到数据,所以最后通过打印List的大小,最终发现了奇怪点,用基础数据类型出来的List的大小为1
以下是我的测试代码
java
@Test
void test2() {
int[] str = {1,2,3,4,5};
List<int[]> list = Arrays.asList(str);
for (int[] ints : list) {
System.out.println(ints);
}
System.out.println(list + " 大小为:"+list.size());
}
输出结果为:
java
[I@1846579f
[[I@1846579f] 大小为:1
解决方案: 将基础数据类型转成包装类型,改进后的代码如下。
java
@Test
void test2() {
Integer[] str = {1,2,3,4,5};
List<Integer> list = Arrays.asList(str);
for (Integer ints : list) {
System.out.println(ints);
}
System.out.println(list + " 大小为:"+list.size());
}
输出结果:
java
1
2
3
4
5
[1, 2, 3, 4, 5] 大小为:5
第二个问题
在我对数据转成List后,拿到了返回的List对象,安装正常的add方法来进行添加对象,这个时候编译器也没有报错,在执行的时候,会报错。
java.lang.UnsupportedOperationException
示例代码如下:
java
@Test
void test2() {
Integer[] str = {1,2,3,4,5};
List<Integer> list = Arrays.asList(str);
for (Integer ints : list) {
System.out.println(ints);
}
list.add(2);
System.out.println(list + " 大小为:"+list.size());
}
错误信息如下:
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at org.example.projectdemo.ProjectDemoApplicationTests.test2(ProjectDemoApplicationTests.java:88)
解决方案
:如果说转成的对象在后续的操作中会进行修改,一定不要使用Array.asList这个方法。
推荐使用new ArrayList<>();这个api来进行操作。当然可以两个结合起来使用。如下所示:
java
@Test
void test2() {
Integer[] str = {1,2,3,4,5};
List<Integer> list =new ArrayList<>(Arrays.asList(str)) ;
for (Integer ints : list) {
System.out.println(ints);
}
list.add(2);
System.out.println(list + " 大小为:"+list.size());
}
这样的话就没有问题了。