java种List和Array的相互转换

java种List和Array的相互转换,第1张

java种List和Array的相互转换 1.说明       (原文)

在Java中,经常遇到需要List与数组互相转换的场景。
List->数组,可以使用List的toArray()或者toArray(T[] a)方法
数组->List,可以使用Arrays.asList()或者Collections.addAll()方法。

2.List->数组 2.1    Object[] toArray();

这个无参方法将List直接转为Object[]数组。

        2.1.1 错误用法:
List strList = new ArrayList<>();
strList.add("list-a");
strList.add("list-b");
String[] strArray = (String[]) strList.toArray();

 错误原因:返回Object[]类型,无法强转成String[]类型

        2.1.2 正确用法:
List strList = new ArrayList<>();
Object[] strArray = strList.toArray();

得到了一个通常情况下没啥用的Object[]。 要想得到自己想要类型的数组,需要用toArray(T[] a)方法。

2.2   T[] toArray(T[] a)
//list转数组
    public void list2arrayTest(int size){
        List strList = new ArrayList<>();
        strList.add("list-a");
        strList.add("list-b");
        String[] strArray1 = new String[size];
        String[] strArray2 = strList.toArray(strArray1);
    }
        2.2.1 size

得到的strArray1和strArray2不是一个对象

         2.2.2 size==strList.size()

 得到的strArray1和strArray2是一个对象。

        2.2.3 size>strList.size()

 得到的strArray1和strArray2是一个对象,数组中多余的位置为null。

 3.数组->list 3.1使用Arrays.asList()方法

注意:

该方法的返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。
java.util.Arrays.ArrayList类具有set(),get(),contains()等方法,
但是不支持添加add()或删除remove()方法,调用这些方法会报错。

//数组转list
    public  void array2listTest(){
        String[] strArray = { "array-a", "array-b" };
        List strList = Arrays.asList(strArray);//Returns a fixed-size list backed by the specified array

        strList.add("array-c");//会报错
    }

错误信息:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
	at xn.xnjt.list.ArrayListTest.array2listTest(ArrayListTest.java:32)
	at xn.xnjt.list.ArrayListTest.main(ArrayListTest.java:17)

解决办法:新建一个java.util.ArrayList对象,再添加元素。

//数组转list
    public  void array2listTest(){
        String[] strArray = { "array-a", "array-b" };
        List strList = Arrays.asList(strArray);//Returns a fixed-size list backed by the specified array

        List strList1=new ArrayList<>(strList);
        strList1.add("array-c");//会报错
    }

 3.2.使用Collections.addAll()方法

可以直接添加新元素

public void array2listTest1(){
        String[] strArray = { "array-a", "array-b" };
        List strList = new ArrayList<>(strArray.length);
        Collections.addAll(strList, strArray);
        strList.add("array-c");

    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5683353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存