Java数组和List之间相互转换

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);
        }
    }

}

你可能感兴趣的:(java)