JAVA-数组和List转换

日常开发时,经常遇到需要List与数组互相转换的场景。
List转换成数组,可以用List的toArray()或者toArray(T[] a)的方法。
数组转换成List,可以用Arrays.asList()或者Collections.addAll()方法。
如果仅仅为了打印数组,不需要把数组转换成List,
可以使用Arrays.toString()方法。

一.List转数组

List转换成数组可以调用toArray方法,可以将List直接转为Object[]数组
这里有两个重载的方法,
一般使用带泛型参数的方法:

Object[] toArray();
 T[] toArray(T[] a);

无参数toArray方法,这里注意不能强转,可能会出现报错.

泛型的toArray方法要注意类型必须是包装类型,基本类型是不行的.

二.数组转List

可以使用Arrays.asList()或者Collections.addAll()方法,推荐使用Collections.addAll()方法,这样得到的返回对象可以往里面添加新的元素。

String[] strArray = { "a", "b" };
List strList = Arrays.asList(strArray);

注意该方法的返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,
它并非java.util.ArrayList类。
java.util.Arrays.ArrayList类具有set(),get(),contains()等方法,但是不支持添加add()或删除remove()方法,调用这些方法会报错。

如果直接往返回的list添加一个新元素,运行会报错UnsupportedOperationException

strList.add("c");

解决方法是新建一个List对象,并且加入返回的strList,然后再add新元素:

List strListNew = new ArrayList<>(strList);
strListNew.add("new data");

Collections.addAll():

String[] strArray = { "a", "b" };
List strList = new ArrayList<>(strArray.length);
Collections.addAll(strList, strArray);
strList.add("c");

得到的返回对象可以直接添加新的元素。

Java8可用stream流将3种基本类型数组转为List

List intList= Arrays.
stream(new int[] { 1, 2,  3}).boxed().collect(Collectors.toList());
List longList= Arrays.
stream(new long[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
List doubleList= Arrays.
stream(new double[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
String[] arrays = {"a", "b", "c"};
List stringList= Stream.of(arrays).collect(Collectors.toList());

其他的数据类型short[]byte[]char[]在JDK1.8中目前不支持

你可能感兴趣的:(JAVA基础,java)