A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© as_heima 中级黑马   /  2014-8-8 20:35  /  1954 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 as_heima 于 2014-8-13 23:05 编辑

Integer[] b = list.toArray(new Integer[0]) 这句话不是很了解,查了API也没懂!求大神讲解下~

14 个回复

倒序浏览
这句代码很绕       Integer[] b=list.toArray(new Integer[0])

不过这个写法感觉很厉害的样子。

=右边:估计前面的代码中有一个List集合的对象,list.toArray(new Integer[0]),这是调用了List中的一个方法,在API的最后,它将list集合中的元素全部存入匿名数组中,也就是new Integer[0]中。不过这个数组的长度为0,所以啥也没存下。toArray方法的返回值就是一个数组,这里返回的应该是Intger类型的数组,长度为0

我猜想楼主大人的代码可能抄写的有些错误,应该是下面这样的吧。
Integer[] b=list.toArray(new Integer[list.size()])

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报
list.toArray(),返回的是一个Object类型的数组,就需要传入参数new Integer[0],返回数组的运行时类型是Integer,意思就是把把list转变为Integer类型的数组
其中的 0  就是数组开辟的长度,如果数组不足以装下 list,就自己增加长度,但是如果集合只有4个元素,定义的数组长度为5,那么数组的最后一个值就是null。所以一般就定义长度为list.size();

Integer[] b = list.toArray(new Integer[list.size()])
回复 使用道具 举报
wisely 发表于 2014-8-8 20:57
这句代码很绕       Integer[] b=list.toArray(new Integer[0])

不过这个写法感觉很厉害的样子。

首先感谢大神的回答,代码错没错,因为我没看懂所以不敢断言,但是运行结果没错
回复 使用道具 举报
杨庆雷 发表于 2014-8-8 21:14
list.toArray(),返回的是一个Object类型的数组,就需要传入参数new Integer[0],返回数组的运行时类型是Int ...

谢谢,好像刚刚懂一点点0.0
回复 使用道具 举报
杨庆雷 发表于 2014-8-8 21:14
list.toArray(),返回的是一个Object类型的数组,就需要传入参数new Integer[0],返回数组的运行时类型是Int ...

new Integer[0],请问toArray的参数都可以放什么?
回复 使用道具 举报
本帖最后由 wisely 于 2014-8-8 22:01 编辑
as_heima 发表于 2014-8-8 21:51
new Integer[0],请问toArray的参数都可以放什么?

数组,任意对象的数组。
PS:是对象的数组,基本类型的数组不行。因为List带泛型,所以泛型是什么类型,它就是什么类型。如果不带泛型,就是Object类型。
回复 使用道具 举报
学习来了。。。
回复 使用道具 举报
wisely 发表于 2014-8-8 22:00
数组,任意对象的数组。
PS:是对象的数组,基本类型的数组不行。因为List带泛型,所以泛型是什么类型,它 ...

先谢谢,你的回答我暂时没全看懂,得消化消化........
回复 使用道具 举报
   public <T> T[] toArray(T[] a) {      
        if (a.length < size)
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }
你可以看看这个 底层实现原理
回复 使用道具 举报
学习了!
回复 使用道具 举报
李林_ 发表于 2014-8-9 00:35
public  T[] toArray(T[] a) {      
        if (a.length < size)
            return (T[]) Arrays.c ...

:funk: 完全没看懂....这个底层实现~能否配合讲解一下..
回复 使用道具 举报
本帖最后由 李林_ 于 2014-8-9 12:41 编辑

public <T> T[] toArray(T[] a) {      //  方法中含有<T>代表是泛型方法  这个<>可以任意写  
                                                    //但后面要一样 这个T指任意     Integer[] b=list.toArray(new Integer[0])
        if (a.length < size)               //a.length  就不用说了吧    size 是ArrayList类里的一个属性在构造 public ArrayList(Collection<? extends E> c) 赋值
       return (T[]) Arrays.copyOf(elementData, size, a.getClass());   //这是个拷贝方法  参数一1是要拷贝的数组  参数2 要拷贝的长度  参数3是要拷贝的类文件
        System.arraycopy(elementData, 0, a, 0, size);    //这也是一个拷贝方法   参数1 原数组 参数2原数组的起始位置  参数3  目标数组  参数4目标数组中起始位置                                               参数5要拷贝的长度
                                                                                   
        if (a.length > size)
            a[size] = null;
        return a;
    }
现在看不懂也没关系   以后学的更深入了就看的懂了
回复 使用道具 举报
李林_ 发表于 2014-8-9 12:10
public  T[] toArray(T[] a) {      //  方法中含有代表是泛型方法  这个可以任意写  
                    ...

谢谢你的注释:)
回复 使用道具 举报
没事  一起学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马