1.List转换为Array(List实际为接口这里指ArrayList)
可以使用ArrayList的toArray方法:
public <T> T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组;返回数组的运行时类型就是指定数组的运行时类型。如果列表能放入指定的数组,则返回放入此列表元素的数组。否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组。
如果指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末尾的元素设置为 null。这对确定列表的长度很有用,但只 在调用方知道列表中不包含任何 null 元素时才有用。
如果 a 的运行时类型不是此列表中每个元素的运行时类型的超类型,则会抛出ArrayStoreException的异常。
使用方法:
List list = new ArrayList();
list.add("1");
list.add("2");
final int size = list.size();
String[] arr = (String[])list.toArray(new String[size]);
2.Array转换为List
网上好多推荐用Arrays.asList()函数来进行转换。
String[] arr = new String[]("1","2");
List list = Arrays.asList(arr);
这里的Arrays.asList()返回值为ArrayList,该ArrayList不是java.util.ArrayList。源码如下:
//这是一个静态私有内部类
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable{
//存储列表元素的数组
private final E[] a;
//唯一的构造函数
ArrayList(E[] array){
if(array == null)
throw new NullPointException();
a = array;
}
/*其他方法省略*/
}
可以看出来ArrayList是一个静态私有内部类,除了Arrays能访问外,其他类都不能访问。这个类和它的父类均没有提供了add()函数的具体实现,故asList()函数获得的Array只能进行读操作。这里有个方法比较巧妙:
List list = new ArrayList(Arrays.asList(array));
这样就能执行List的插入删除等操作。