在Java中,经常遇到需要List与数组互相转换的场景。
List->数组,可以使用List的toArray()或者toArray(T[] a)方法。
数组->List,可以使用Arrays.asList()或者Collections.addAll()方法。
这个无参方法将List直接转为Object[]数组。
2.1.1 错误用法:ListstrList = new ArrayList<>(); strList.add("list-a"); strList.add("list-b"); String[] strArray = (String[]) strList.toArray();
错误原因:返回Object[]类型,无法强转成String[]类型
2.1.2 正确用法:ListstrList = new ArrayList<>(); Object[] strArray = strList.toArray();
得到了一个通常情况下没啥用的Object[]。 要想得到自己想要类型的数组,需要用toArray(T[] a)方法。
2.2//list转数组 public void list2arrayTest(int size){ List2.2.1 sizestrList = new ArrayList<>(); strList.add("list-a"); strList.add("list-b"); String[] strArray1 = new String[size]; String[] strArray2 = strList.toArray(strArray1); }
得到的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" }; ListstrList = 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" }; List3.2.使用Collections.addAll()方法strList = Arrays.asList(strArray);//Returns a fixed-size list backed by the specified array List strList1=new ArrayList<>(strList); strList1.add("array-c");//会报错 }
可以直接添加新元素
public void array2listTest1(){ String[] strArray = { "array-a", "array-b" }; ListstrList = new ArrayList<>(strArray.length); Collections.addAll(strList, strArray); strList.add("array-c"); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)