最近看到了四种实现数组到列表转换的方法。本文将详细介绍它们。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
目录
第一种方法(不一定是最好的):使用Arraylist.aslist(strArray)第二种方法(支持增删改):第三种方法(通过集合工具类Collections.addAll()方法(效率最高))第四种方法通过JDK8 Stream stream将3种基本类型的数组转换成Listjava数组转换成List,误区1。你不能把基本类型转换成列表
第一种方式(未必最佳):使用ArrayList.asList(strArray)
使用数组工具类Arrays.asList(strArray),转换完成后,只能检查和更改列表数组,不能添加或删除。如果添加或删除它,将引发UnsupportedOperationException异常。
导入Java . util . arrays;
导入Java . util . list;
公共静态void Demo1() {
String[] str={'fgx ',' lzy ' };
//注意,这个列表不是Collections包中的列表,而是util包中的列表接口。
ListString ints=arrays . aslist(str);
//这里会报告一个错误
ints . add(' laopo ');
}
添加数据时出错:
线程“main”Java . lang . unsupportedoperationexception中出现异常
位于Java . util . abstract list . add(abstract list . Java:148)
位于Java . util . abstract list . add(abstract list . Java:108)
在JAVA基金会。JDK8的新特性。要列出的Java数组。演示1(Java阵列到List.java:20)
在JAVA基金会。JDK8的新特性。Java数组到List.main(Java数组到List.java:13)
错误原因:Arrays.asList(str)的返回值是java.util.Arrays类中的私有静态内部类Java . util . ArrayList(),不是我们通常所说的Java . util . arrays();
使用场景:arrays.asList (strarray)方法只能在数组转换成列表后使用,不能增删其值,只能作为读取的数据源。
第二种方法(支持增删查改):
通过ArrayList的构造函数,将Arrays.asList(strArray)的返回值从java.util ArrayList改为java.util.ArrayList .
关键代码:ArrayList list=new ArrayList(arrays . as list(strArray));
String[] str={'fgx ',' lzy ' };
//注意,这个列表不是Collections包中的列表,而是util包中的列表接口。
Java . util . ArrayList string strings=new ArrayList(arrays . as list(str));
strings . add(' AOP ');
strings.stream()。forEach(system . out:println);
使用场景:将数组转换成列表后需要添加、删除、更改列表,在列表数据不大的情况下可以使用。
第三种方式(通过集合工具类Collections.addAll()方法(最高效))
通过Collections.addAll (ArrayList,Strarray)转换,根据数组的长度创建一个相同长度的列表。然后,通过collections.addall()方法,将数组中的元素转换为二进制,然后添加到列表中。这是最有效的方法。
公共静态void Demo3() {
//注意,这个列表不是Collections包中的列表,而是util包中的列表接口。
String[] str={'fgx ',' lzy ' };
Java . util . ArrayList string string list=new ArrayList(str . length);
Collections.addAll(stringList,str);
}
第四种方式通过JDK8的Stream流将3总基本类型数组转为List
如果JDK版本在1.8以上,使用stream stream快速将以下三个数组转换成List,分别是int []、long []和double [],但是JDK1.8不支持short []、byte []和char []
int[] ints={2,34,55,22,11 };
long[] longs={1,2,3 };
double[] doubles={1,2,3 };
arrays . stream(int)。盒装()。collect(collectors . to list());
Arrays.stream(长整型)。盒装()。collect(collectors . to list());
Arrays.stream(双精度)。盒装()。collect(collectors . to list());
温馨提示:为什么int[]不能直接转换成List,而Integer[]可以转换成List,Integer[]可以转换成List,因为List中的泛型必须是引用类型。
java数组转list误区
一、不能把基本数据类型转化为列表
仔细观察发现,asList接受的参数是一个泛型的变长参数,而基本数据类型是不能通用化的,如下所示:
公共类应用程序{
公共静态void main(String[] args) {
int [] intarray={ 1,2,3,4,5 };
//list integer list=arrays . aslist(int array);编译失败。
list int[]list=arrays . aslist(int array);
system . out . println(list);
}
}
输出:
[[I @66d3c617 ]
这是因为int类型的数组作为参数,所以转换后的列表只包含一个int[]元素。
解决方案:
要将基本数据类型的数组转换为其包装类型的列表,可以使用guava类库的tool方法,如下例所示:
int [] intArray={ 1,2,3,4 };
list integer list=ints . aslist(int array);
二、asList方法返回的是数组的一个视图
View是指这个列表上的所有操作都会反映到原来的数组中,而且这个列表的长度是固定的,不支持add、remove等改变长度的方法。
公共类应用程序{
公共静态void main(String[] args) {
int [] intArray={ 1,2,3,4 };
list integer list=ints . aslist(int array);
list.set( 0,100);
system . out . println(arrays . tostring(int array));
list . add(5);
list . remove(0);
}
}
输出:
[ 100 , 2 , 3 , 4 ]
不支持操作异常
不支持操作异常
原因:
get(我)?size()?没问题。
add()?不支持此操作!
为什么?让我们来看看Arrays.asList(T.a)方法已完成。
嗯~ ~好像没什么。返回ArrayLIst的一个实例。多看看代码:
这是什么鬼东西?返回的ArrayList不是java.util.ArrayList,而是数组中的内部类实例。我立刻觉得被骗了。
我们来看看这个内部类有什么方法。好像没有添加方法~ ~
那么如果想用add方法应该怎么做呢?
你只需要用java.util.ArrayList在外层再包一层
最后,Arrays.asList方法本身没有问题。这只是取决于如何处理转换后的列表。如果只是需要查询列表中的元素,直接使用即可;如果需要再次添加和移除元素,在使用之前先包装一层java.util.ArrayList。
关于Java数组转换成List的四种方式的总结,本文就到这里了。有关将Java数组转换为列表的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。