Java数组和List互相转换

list转数组

java中list集合转为数组的方法:

1、使用无参数toArray方法,语法格式“Object[] toArray();”;

2、使用支持泛型的toArray方法,语法格式“T[] toArray(T[] a);”。

List转换成数组可以调用toArray方法,

这里有两个重载的方法,

一般使用第2个带泛型参数的方法:

Object[] toArray();

<T> T[] toArray(T[] a);

1

2

3

无参数toArray方法

Object[] toArray();

1

这个方法将List直接转为Object[]数组。

Java初学者喜欢用这个方法,

没有参数使用起来很方便,

而且代码编译也没有报错,

错误使用的示例代码如下:

List<String> strList = new ArrayList<>();

strList.add("list-a");

strList.add("list-b");

String[] strArray = (String[]) strList.toArray();

1

2

3

4

5

6

7

结果一运行,直接报错,

不能将Object[]转化为String[]:

Exception in thread "main" java.lang.ClassCastException:

[Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

1

2

3

正确使用代码如下:

List<String> strList = new ArrayList<>();

Object[] strArray = strList.toArray();

1

2

3

得到了一个通常情况下没啥用的Object[]。

支持泛型的toArray方法

<T> T[] toArray(T[] a);

1

这个方法接收一个类型为 T 的数组,

注意基本类型是不能作为泛型参数的。

如果是使用int[] 类型数组,

需要把 int[] 换成 Integer[] 。

使用的示例代码如下:

List<String> strList = new ArrayList<>();

strList.add("list-a");

strList.add("list-b");

String[] strArray = strList.toArray(new String[strList.size()]);

1

2

3

4

5

6

7

toArray方法入参的数组大小

针对如下代码,

分析一下初始化的String数组的大小size,

和List的大小strList.size()的关系,

对于返回值产生的不同影响:

List<String> strList = new ArrayList<>();

strList.add("list-a");

strList.add("list-b");

String[] strArray1 = new String[size];

String[] strArray2 = strList.toArray(strArray1);

1

2

3

4

5

6

7

8

9

2.3.1.size < strList.size()

现在设置size=0,

小于strList.size()=2,

代码修改部分如下:

String[] strArray1 = new String[0];

1

返回的strArray2和strArray1不是同一个对象。

2.3.2.size = strList.size()

现在设置size=strList.size(),

代码修改部分如下:

String[] strArray1 = new String[strList.size()];

1

返回的strArray2和strArray1是同一个对象。

所以下面两块代码是等价的,

得到的strArray都是我们期望的结果:

String[] strArray = strList.toArray(new String[strList.size()]);

String[] strArray = new String[strList.size()];

strList.toArray(strArray);

1

2

3

4

5

2.3.3.size > strList.size()

现在设置size=strList.size()+1,

代码修改部分如下:

String[] strArray1 = new String[strList.size()+1];

返回的strArray2和strArray1是同一个对象,

但是数组的最后一个元素是null,

如果数组中的元素多于List中的元素,

列表复制完后紧接着的数组末尾被设置为null,

即strArray1[strList.size()]=null,

这对于调用方确定数组的真实长度很有用,

如果使用strList.size()+2初始化数组,

则数组的倒数第二个元素是null。

数组转list

java中将数组转为list集合的方法:

1、使用原生方式,使用for()循环来拆分数组,并添加到List中;

2、使用Arrays.asList()方法;

3、使用Collections.addAll()方法;

4、使用List.of()方法。

问题描述:对于给定的如下数组,如何转换成List集合?

String[] array = {"a","b","c"};

1

参考stackoverflow总结如下几种写法:

1.使用原生方式,拆分数组,添加到List

List<String> resultList = new ArrayList<>(array.length);

for (String s : array) {

resultList.add(s);

}

1

2

3

4

2.使用Arrays.asList()

List<String> resultList= new ArrayList<>(Arrays.asList(array));

1

注意:调用Arrays.asList()时,其返回值类型是ArrayList,但此ArrayList是Array的内部类,调用add()时,会报错:java.lang.UnsupportedOperationException,并且结果会因为array的某个值的改变而改变,故需要再次构造一个新的ArrayList。

3.使用Collections.addAll()

List<String> resultList = new ArrayList<>(array.length);

Collections.addAll(resultList,array);

1

2

3

4.使用List.of()

此方法为 Java9新增方法,定义在List接口内,并且为静态方法,故可以由类名直接调用。

List<String> resultList = List.of(array);

————————————————

原文链接:https://blog.csdn.net/qq_40649503/article/details/124611617

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值