【Java】 数组转 List 的三种方式及对比

本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。

一、 (最高效) 通过集合工具类Collections.addAll()方法,支持增删改查等方法

通过Collections.addAll(arrayList, strArray)方式转换,根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()方法,将数组中的元素添加到List中,这是最高效的方法。

使用场景:需要在将数组转换为List后,对List进行增删改查操作,在List的数据量巨大的情况下优先使用,可以提高操作速度。

注:附上Collections.addAll()方法源码:

		@SafeVarargs
    public static <T> boolean addAll(Collection<? super T> c, T... elements) {
    
    
        boolean result = false;
        for (T element : elements)
            result |= c.add(element);
        return result;
    }

关键代码:

List<String> aryList = new ArrayList<>(strAry.length);
Collections.addAll(aryList, strAry);

测试代码:

		@Test
    public void aryToListByCollectionsTest() {
    
    
        String[] strAry = new String[]{
    
    "张三", "李四", "王五"};
        List<String> aryList = new ArrayList<>(strAry.length);
        Collections.addAll(aryList, strAry);
        System.out.println(aryList);
        System.out.println("------ 修改 List -----");
        aryList.add("赵六");
        System.out.println(aryList);
    }

执行结果,可以对List进行增删改查等操作:

在这里插入图片描述

二、最常见的方式,不支持增删方法(未必最佳)

通过 Arrays.asList(strAry) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常

关键代码List<String> aryList = Arrays.asList(strAry);

测试代码:

		@Test
    public void aryToListByAsListTest() {
    
    
        String[] strAry = new String[]{
    
    "张三", "李四", "王五"};
        List<String> aryList = Arrays.asList(strAry);
        System.out.println(aryList);
        System.out.println("------ 修改 List -----");
        aryList.add("赵六");
        System.out.println(aryList);
    }

执行结果,程序在执行到aryList.add(“赵六”);抛出异常 UnsupportedOperationException:

在这里插入图片描述

原因解析Arrays.asList(strArray)返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。

使用场景Arrays.asList(strAry)方式仅能用在将数组转换为List后,不需要增删其中的值,仅作为数据源读取使用。

三、 数组转为List后,支持增删改查的方式

通过ArrayList的构造器,将Arrays.asList(strArray)的返回值由java.util.Arrays.ArrayList转为java.util.ArrayList

关键代码ArrayList list = new ArrayList(Arrays.asList(strAry)) ;

测试代码:

		@Test
    public void aryToListByArrayListTest() {
    
    
        String[] strAry = new String[]{
    
    "张三", "李四", "王五"};
        List<String> aryList = new ArrayList<>(Arrays.asList(strAry));
        System.out.println(aryList);
        System.out.println("------ 修改 List -----");
        aryList.add("赵六");
        System.out.println(aryList);
    }

执行结果,可以对List进行增删改查等操作:

在这里插入图片描述

使用场景:需要在将数组转换为List后,对List进行增删改查操作,在List的数据量不大的情况下,可以使用。

猜你喜欢

转载自blog.csdn.net/ToBeMaybe_/article/details/119647011
今日推荐