,,Java 数组转List的四种方式小结

,,Java 数组转List的四种方式小结

最近看到了四种实现数组到列表转换的方法。本文将详细介绍它们。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

目录

第一种方法(不一定是最好的):使用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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: