new Object[0]的作用

概述

在集合转换成数组时通常可以看到xxx.toArray(new Object[0])的代码,为什么这样写呢,什么意思呢?

示例

    public static void main(String[] args) {
        Set<Integer> sets = new HashSet<>();
        sets.add(1);
        sets.add(2);
        sets.add(3);
        Integer[] integers = sets.toArray(new Integer[0]);
        Stream.of(integers).forEach(System.out::println);
    }

写法的作用

  • 返回包含此collection中所有元素的数组,就是一种集合转数组的手段。
  • 返回数组的运行时类型与指定数组的运行时类型相同,比如上例中sets集合中的是Integer类型,那么sets.toArray(new Integer[0])这里只能写Integer类型,否则运行失败,不同的类型无法转换。
  • 如果指定的数组能容纳改Collection,则返回包含此collection元素的数组,否则将根据指定数组的运行时类型和此collection的大小分配一个新数组。也就是说toArray中的数组容量能够容纳collection,则返回toArray里面的数组,否则生成新数组,项new Object[0]这样的数组肯定是生成新数组了,这里new Object[0]其实就是指定一个新数组元素的类型。
    示例如下:toArray中的数组容量足够,所以数据就是放在了integersArray 中了。
    存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
    public static void main(String[] args) {
        Set<Integer> sets = new HashSet<>();
        Integer[] integersArray = new Integer[3];
        sets.add(1);
        sets.add(2);
        sets.add(3);
        Integer[] integers = sets.toArray(integersArray);
        Stream.of(integersArray).forEach(System.out::println);
    }

运行结果:

1
2
3
  • 如果指定的数组能容纳 collection 并有剩余空间(即数组的元素比 collection 的元素多),那么会将数组中紧跟在 collection 末尾的元素设置为 null。(这对确定 collection 的长度很有用,但只有 在调用方知道此 collection 没有包含任何 null 元素时才可行。)
  • 像 toArray 方法一样,此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许在输出数组的运行时类型上进行精确控制,并且在某些情况下,可以用来节省分配开销。

注意

  • 如果此 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。
  • 注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。

原理

这里写new Object[0]就是一种类型标记,告诉toArray方法把集合的元素转换成指定Object的数组,由于长度是0,则会生成一个新数组来存在集合中的元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

融极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值