程序员社区

(Java集合面试题)如何实现数组和 List之间的转换?

List 转 Array

List 转Array,必须使用集合的 toArray(T[] array),如下:


 List list = new ArrayList();
 list.add("jay");
 list.add("tianluo");

 // 使用泛型,无需显式类型转换
 String[] array = list.toArray(new String[list.size()]);
 System.out.println(array[0]);

如果直接使用 toArray 无参方法,返回值只能是 Object[] 类,强转其他类型可能有问题,demo如下:

List<String> list = new ArrayList<String>();
list.add("jay");
list.add("tianluo");

String[] array = (String[]) list.toArray();
System.out.println(array[0]);

运行结果:


 Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
    at Test.main(Test.java:14)

Array 转List

使用Arrays.asList() 把数组转换成集合时,不能使用修改集合相关的方法啦,如下:

String[] str = new String[] { "jay", "tianluo" };
List list = Arrays.asList(str);
list.add("boy");

运行结果如下:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at Test.main(Test.java:13)

因为 Arrays.asList不是返回java.util.ArrayList,而是一个内部类ArrayList。

(Java集合面试题)如何实现数组和 List之间的转换?插图

可以这样使用弥补这个缺点:

//方式一:
ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
Collections.addAll(arrayList, strArray);
//方式二:
ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;

Java面试题

赞(0) 打赏
未经允许不得转载:IDEA激活码 » (Java集合面试题)如何实现数组和 List之间的转换?

一个分享Java & Python知识的社区