java list 数组 转换

来源:互联网 发布:Ubuntu Gnome 16.04.3 编辑:程序博客网 时间:2024/05/18 15:55

说明

平常经常会用到数组、list的相互转换,但一直没有认证研究,尤其为什么Arrays.asList返回的list不能增加、删除元素,今天彻底搞懂了。

数组转list

Arrays.asList(T… a)

数组转list,使用Arrays.asList(T… a)方法

    //数组转list    String[] players={"kobe","t-mac","cp3"};    //Arrays.asList返回的list是固定大小的,不能add、remove操作    List<String> noList = Arrays.asList(players);

注意,Arrays.asLit()返回的list是固定大小的,不能执行增加、删除操作。所以通常的做法是

List<String> yesList=  new ArrayList<String>(Arrays.asList(players));

Arrays.asList返回的list为什么不能增加、删除元素?

查看源码

Arrays.javapublic static <T> List<T> asList(T... a) {        return new ArrayList<>(a);    }

这里用到了ArrayList,不可思议了,因为Arraylist是可以增加、删除元素的呀!为什么这里却不能?继续查看源码发现这里的ArrayList原来是Arrays的内部类ArrayList,而不是java.util.ArrayList

private static class ArrayList<E> extends AbstractList<E>        implements RandomAccess, java.io.Serializable    {        private static final long serialVersionUID = -2764017481108945198L;        private final E[] a;        ArrayList(E[] array) {            if (array==null)                throw new NullPointerException();            a = array;        }      }

Arrays$ArrayList继承自AbstractList,AbstractList的add、remove方法都抛出异常,所以不能增加、删除元素。另外,构造方法中a=array,说明,数组转换出来的list与数组,指向同一块内存。

public void add(int index, E element) {        throw new UnsupportedOperationException();    }
 public E remove(int index) {        throw new UnsupportedOperationException();    }

list转数组

list.toArray(T[] a)

        //list转数组        List<String> list2 = new ArrayList<String>();        list2.add("kobe");        list2.add("t-mac");        list2.add("cp3");        String[] arr2 = list2.toArray(new String[list2.size()]);
0 0
原创粉丝点击