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<String> strList = new ArrayList<>();
strList.add("list-a");
strList.add("list-b");
String[] strArray = (String[]) strList.toArray();

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

        2.1.2 正确用法:

List<String> strList = new ArrayList<>();
Object[] strArray = strList.toArray();

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

2.2   <T> T[] toArray(T[] a)

//list转数组
    public void list2arrayTest(int size){
        List<String> 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<strList.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<String> 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<String> strList = Arrays.asList(strArray);//Returns a fixed-size list backed by the specified array

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

 3.2.使用Collections.addAll()方法

可以直接添加新元素

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

    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值