Java数组转List的三种方式及对比
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Java数组转List的三种方式及对比
* @author BaiLiJun on 2019/10/25
*/
public class Test9 {
public static void main(String[] args) {
//simpleMethod();
//testArrayCastToListRight();
testArrayCastToListEfficient();
}
/**
* 通过Collections.addAll(arrayList, strArray)方式转换,根据数组的长度创建一个长度相同的List,
* 然后通过Collections.addAll()方法,将数组中的元素转为二进制,然后添加到List中,这是最高效的方法
*/
private static void testArrayCastToListEfficient() {
String[] arr=new String[2];
ArrayList<String> list = new ArrayList<String>(arr.length);
Collections.addAll(list,arr);
list.add("1");
System.out.println("list = " + list);
}
/**
* 通过ArrayList的构造器,将Arrays.asList(strArray)的返回值由java.util.Arrays.ArrayList转为java.util.ArrayList
*/
private static void testArrayCastToListRight() {
String[] arr=new String[2];
ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));
list.add("1");
System.out.println("list = " + list);
}
/**
* 通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。
*/
private static void simpleMethod() {
String[] arr=new String[2];
List<String> list = Arrays.asList(arr);
list.add("1");
System.out.println("list = " + list);
}
}
List集合转换成数组
import java.util.ArrayList;
/**
* 集合转数组
*
* @author BaiLiJun on 2019/10/25
*/
public class Test10 {
public static void main(String[] args) {
//method1();
//method2();
}
/**
* 笨方法是把List中的数据循环添加到数组中
*/
private static void method1() {
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
String[] arr = new String[list.size()];
for (int i = 0; i <list.size() ; i++) {
arr[i]=list.get(i);
}
for (String s : arr) {
System.out.println("s = " + s);
}
}
/**
* 采用集合的toArray()方法直接把List集合转换成数组,这里需要注意,不能这样写:
* String[] array = (String[]) mlist.toArray();
* 这样写的话,编译运行时会报类型无法转换java.lang.ClassCastException的错误,这是为何呢,这样写看起来没有问题啊
* 因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,所以将整个List强制转换是不行的
* 正确的写法应该是这样的
* String[] array = mlist.toArray(new String[0]);
*/
private static void method2() {
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
String[] array = list.toArray(new String[0]);
for (String s : array) {
System.out.println("s = " + s);
}
}
}