http://wanglihu.iteye.com/blog/243238
Arrays.asList()返回的是Arrays内部类的一个list集合,但是这个List的实现类是java.util.Arrays.ArrayList这个类(而不是java.util.ArrayList)。因而不支持add(),remove()操作,
换句话说,其实java.util.Arrays.ArrayList其实只是对数组做了一个装饰,可以看到里面的实现,E get(int index)、E set(int index, E element)等方法都是对数组的操作,他的目的只是提供了可以像访问List那样来访问数组而已。本质上其实还是一个数组。
JDK 1.5中,java.util.Arrays.asList的定义,函数参数是Varargs, 采用了泛型实现。同时由于autoboxing的支持,使得可以支持对象数组以及基本类型数组。
不过在使用时,当传入基本数据类型的数组时,会出现小问题,会把传入的数组整个当作返回的List中的第一个元素,例如:
1 | public static void main(String[] args){ |
2 | int [] a1 = new int []{ 1 , 2 , 3 }; |
3 | String[] a2 = new String[]{ "a" , "b" , "c" }; |
4 | |
5 | System.out.println(Arrays.asList(a1)); |
6 | System.out.println(Arrays.asList(a2)); |
7 | } |
打印结果如下:
1 | [[I @dc8569 ] |
2 | [a, b, c] |
http://blog.csdn.net/gh102/article/details/7301051
http://xixinfei.iteye.com/blog/1260852
List.toArray()
下面是ArrayList的两个toArray()方法的源代码:
- public Object[] toArray() {
- Object[] result = new Object[size];
- System.arraycopy(elementData, 0, result, 0, size);
- return result;
- }
- public Object[] toArray(Object a[]) {
- if (a.length < size)
- a = (Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size); System.arraycopy(elementData, 0, a, 0, size);
- if (a.length > size)
- a[size] = null;
- return a;
- }