如何实现数组和 List之间的转换?
####List 转 Array
List 转Array,必须使用集合的 toArray(T[]array),如下:
```
List<String> list = new ArrayList<String>();
list.add("Bryant");
list.add("Zhang");
// 使用泛型,无需显式类型转换
String[] array = list.toArray(new String[list.size()]);
System.out.println(array[0]);
```
如果直接使用 toArray 无参方法,返回值只能是 Object[]类,强转其他类型可能有问题,demo如下:
```
List<String> list = new ArrayList<String>();
list.add("Bryant");
list.add("Zhang");
String[] array = (String[]) list.toArray();
System.out.println(array[0]);
```
运行结果:
```
Exception in thread "main" java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module java.base of loader 'bootstrap')
```
####Array 转List
使用Arrays.asList() 把数组转换成集合时,不能使用修改集合相关的方法啦,如下:
```
String[] str = new String[] { "Bryant", "Zhang" };
List list = Arrays.asList(str);
list.add("boy");
```
运行结果如下:
```
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
```
因为 Arrays.asList不是返回java.util.ArrayList,而是一个内部类ArrayList。
可以这样使用弥补这个缺点:
```
//方式一:
ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
Collections.addAll(arrayList, strArray);
//方式二:
ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;
```