Java 集合 List 与 Array 的转换

发表于 2018-04-16 17:19:40
0 22
karry--joy
  • 访问次数:218
  • 积分:389

List 转 Array

使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,大小就是list.size()。
反例:直接使用toArray无参方法存在问题,此方法返回值只能是Object[]类,若强转其它类型数组将出现ClassCastException错误。
反例:

public static void main(String[] args) throws Exception {
    List<String>  list = new ArrayList<String>(); list.add("A");  list.add("B");  list.add("C");

    String[] array = (String[])list.toArray();
}

异常:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

正例:

public static void main(String[] args) throws Exception {
    List<String> list = new ArrayList<String>();  list.add("A"); list.add("B"); list.add("C"); // 使用泛型,无需显式类型转换 String[] array = list.toArray(new String[list.size()]);
    System.out.println(array[0]);
}

Array 转 List

使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。
说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList体现的是适配器模式,只是转换接口,后台的数据仍是数组

String[] str = new String[] { "a", "b" };
 List list = Arrays.asList(str);

第一种情况:list.add("c");运行时异常。

Exception in thread "main" java.lang.UnsupportedOperationException

第二种情况:list[0]= "gujin";那么list.get(0)也会随之修改。

说明:

@SafeVarargs @SuppressWarnings("varargs")
 public static <T> List<T> asList(T... a) { return new ArrayList<>(a);
    }

这个ArrayList并不是java.util中的ArrayList,而是一个内部的ArrayList,不提供add等修改操作。

private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a;

1

karry--joy 最后编辑 于 2018-04-16 17:19:40
回帖
您需要登录才可以回帖  登录  |  立即注册

热门课程

© 2017 WoFu.La v2.0 苏州宽敬信息科技有限公司 All Rights Reserved. 苏ICP备16029533号
进入训练营 >