Java集合List与Array的相互转换
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[])Array();
}
异常:
java arraylist用法复制代码代码如下:
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 = Array(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"; 那么 (0) 也会随之修改。
说明:
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<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;
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论