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