首页 > 代码库 > Java学习笔记-数组与容器间的转制-asList

Java学习笔记-数组与容器间的转制-asList

先列举一下我们需要的api:

java.util.Collection接口中:

toArray

Object[] toArray()
返回包含此 collection 中所有元素的数组。如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。

返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用者可以随意修改返回的数组。

此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。

 

返回:
包含此 collection 中所有元素的数组

java.util.Arrays类中:

asList

public static <T> List<T> asList(T... a)
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess

此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
  
参数:
a - 支持列表的数组。
返回:
指定数组的列表视图。

这里面需要注意的问题还是很多的

一、int[] 无法转换成列表 因为aslist方法无法将基本类型转制保证成类,所以你要讲数组声明为Integer

看代码:

        Integer[] num = {2,3,4};
        int[] num1 = {2,3,4};
        List<Integer> l = Arrays.asList(num);
        List<int[]> l1 = Arrays.asList(num1);

Integer[] 可以正确传入,但是int[] 就不行,因为其内部不会自动包装,这个非常值得注意

二、aslist返回的是视图,而toarray返回的是一个副本

所谓视图是修改会被映射到原结构!

三、用aslist映射的列表只能增加和删除。参照:http://www.cnblogs.com/zolra/archive/2011/03/02/1969235.html