数组与list之间的相互转换


细节还是习惯性的记录下来吧,不然每次都去查API挺耗时间的!!


一、数组转成list


第一种方式:

// 初始化数组
String[] arr = new String[] { "1", "2", "3" };

// 待转换成的list
List list = new ArrayList();

// 通过Collections转换
Collections.addAll(list, arr);

第二种方式:

// 初始化数组
String[] arr = new String[] { "1", "2", "3" };

// 通过Arrays转换成list
List list = Arrays.asList(arr);

注意:Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。

例如:接上面     list.add("4");         运行时则会报异常:java.lang.UnsupportedOperationException


如果想对上述转换后的list再进行add等操作,可以如下:

// 通过list构造函数转换成可操作的list(add等)
List list = new ArrayList(Arrays.asList(arr));

第三种方式(中规中矩的操作,不推荐):

循环数组,把每个元素添加到list中!!!



二、List 转数组


第一种方式:

// 初始化list
List list = new ArrayList();

// 添加数据
list.add("1");
list.add("2");
list.add("3");

// 通过toArray转换
Object[] arr = list.toArray();

注意:用list.toArray()方法返回的是个Object类型的数组,很多人在这里想要得到一个String[]型的数组,就直接像这样强转了:

String[] arr = (String[])list.toArray();   

这种写法是错误的,没有这样的强制转法,编译时不会报错,但是运行时会报不能转换的异常:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

解决上面的问题有两种方式:

1.循环Object数组,单个转换

2.改为API的实现方法

// 先定义一个数组
String[] arr = new String[list.size()];

// 然后再通过toArray转换
list.toArray(arr);



第二种方式:

循环遍历list,添加到数组!!!




以上----------------------------------------------------





你可能感兴趣的:(Java)