美文网首页
Java ArrayList toArray(T[] a)方法源

Java ArrayList toArray(T[] a)方法源

作者: 勇者与王者 | 来源:发表于2019-09-26 11:38 被阅读0次

    今天在看集合的时候,看到这样一句:
    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 迭代器的使用有关

    相关文章

      网友评论

          本文标题:Java ArrayList toArray(T[] a)方法源

          本文链接:https://www.haomeiwen.com/subject/xyvguctx.html