持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情
背景
List使我们在java开发过程中经常会使用的集合,但是它也会有自己的局限及错误。那么接下来我们看看会遇到那些坑吧。
Arrays.asList 方法返回的新 List 不支持新增以及删除的操作
String[] array = new String[]{"a","b","c"};
System.out.println(array.length);
List<String> strings = Arrays.asList(array);
strings.add("d");
strings.remove(1);
这段代码中 最后两行的add和remove都会报错,错误信息如下:
Exception in thread "main" java.lang.UnsupportedOperationException
因为Arrays.asList返回的不是我们平常用的ArrayList;
直接遍历List集合,进行删除操作也会报错
String[] array = new String[]{"a","b","c"};
System.out.println(array.length);
List<String> strings = Arrays.asList(array);
for (int i = 0; i < strings.size(); i++) {
strings.remove(i);
}
这里直接遍历集合进行删除的操作也是错误的,也会报错,如下:
Exception in thread "main" java.lang.UnsupportedOperationException
Arrays.asList转化基本数据类型数组的时候有个意想不到的坑
当我们在实际业务开发过程中,难免会遇到数组转List的操作,通常我们所选择的就是上面的Arrays.asList进行操作,但是,对的但是来了,我们在使用的时候会发现基本数据类型的参数转化的结果会和我们想要的结果完全不一致。
具体操作如下:
int[] array = new int[]{1,2,3};
System.out.println(array.length);
List<int[]> ints = Arrays.asList(array);
System.out.println(ints.size());
各位,能看出这里面的门道吗?还有这两行打印的结果是什么呢?
没错,打印的结果就是3和1,其实很好理解,在第三行代码中我们看到了,我们List内包含的不是我们的int类型,而是int类型的数组,也就是说他把我们的array数组当做了一个整体来给我们转化了,所以不是我们想要的3.
好了,今天先到这,欢迎大家留言交流,也希望大家关注我的公众号《coder练习生》