今天在看集合的时候,看到这样一句:
toArray可以把一个ArrayList对象转换为数组。
需要注意的是,如果要转换为一个Hero数组,那么需要传递一个Hero数组类型的对象给toArray(),这样toArray方法才知道,你希望转换为哪种类型的数组,否则只能转换为Object数组,
没太懂,百度了也将的不是很透彻,看了下源码,
If the list fits in the specified array with room to spare
* (i.e., the array has more elements than the list), the element in
* the array immediately following the end of the collection is set to
* <tt>null</tt>. (This is useful in determining the length of the
* list <i>only</i> if the caller knows that the list does not contain
* any null elements.)
意思是如果传入的a数组长度比list.size()大,那就会把a[size]位置的元素复制为null,这样调用者在确保原list不包含null元素的情况下就能确定list的长度了
因为toArray(T[] a)源码是
// a.length小于list.size()才会生成一个新数组并返回
// a.length 大于等于list.size()会直接将list元素拷贝到a数组,
// 同时,如果a.length 大于list.size() 会将a[size]
// 即 原list元素之后的一个索引位置赋值为null
Hero hs [] = new Hero[heros.size()];
System.out.println(hs);
heros.toArray(hs);
for (Hero h : hs) {
System.out.println(h+" ");
}
可以看到拷贝成功
疑问:
如果list中存在null元素,那这个赋值有什么意义?
想了一下,默认数组元素的值只能是0,除非手动赋值null
而这个赋值的作用,我暂时猜测是跟后面 iterator 迭代器的使用有关
网友评论