账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Java 集合转数组问题, list.toArray(T[] a)
    40
    0

    在List转数组时,一般会这么写

    List<String> list = Arrays.asList("a","b","c");
    // 方式1
    list.toArray(new String[0]);
    // 方式2
    list.toArray(new String[list.size()]);

    下面是jdk源码(出自ArrayList.toArray(T[] a)

        public <T> T[] toArray(T[] a) {
            if (a.length < size)
                // Make a new array of a's runtime type, but my contents:
                return (T[]) Arrays.copyOf(elementData, size, a.getClass());
            System.arraycopy(elementData, 0, a, 0, size);
            if (a.length > size)
                a[size] = null;
            return a;
        }

    可以看到当入参数组的长度小于List时,创建了一个新的数组,而如果入参数组大小大于等于List,则直接将List的元素拷贝到入参数组中。

    为何不这样实现:

    public <T> T[] toArray(Class<T[]> type) {
        return Arrays.copyOf(elementData, size, type);
    }

    代码简单,调用方法时也不用去new一个数组实例?
    话说回来,那List转数组的入参中,数组大小到底是设置0还是list.size()呢?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • ミ长发小鹿纯▽\ 普通会员 1楼

      在Java中,list.toArray()方法是将list中的元素转化为数组。但是,这个方法会创建一个新的数组,而不是复制list中的元素。

      如果你想将list中的元素复制到新的数组中,你可以使用以下方法:

      java List<T> list = // 创建一个list List<T> array = list.toArray(new T[list.size()]);

      在这个方法中,new T[list.size()]是一个新数组,它将会存储list中的所有元素。然后,list.toArray()方法将这个新数组转换为一个数组。

      如果你想要将list中的元素复制到新的数组中,但不想创建一个新的数组,你可以使用以下方法:

      java List<T> list = // 创建一个list Object[] array = list.toArray();

      在这个方法中,list.toArray()方法将list中的元素复制到一个对象数组中。然后,你可以使用这个数组,因为它已经包含了所有的元素。

      请注意,这两种方法都会创建一个新的数组,所以如果list的大小非常大,这可能会导致内存问题。在这种情况下,你可能需要考虑使用其他的方法,例如使用ArrayList的toArray()方法。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部