java中Array与List之间的转换

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的插入删除等操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值