java list.toarray() 方法

list.toarray() 方法将集合转换为数组。但是,在使用该方法时,可能会出现意外的结果。

问题:

以下代码输出令人疑惑的数组值:

立即学习“Java免费学习笔记(深入)”;

        list list = list.of(12, 34, 56);
        integer[] array = list.toarray(new integer[]{1, 2, 1, 43, 32, 1});
        system.out.println(arrays.tostring(array)); // 输出:[12, 34, 56, null, 32, 1]
登录后复制

预计的输出应为:[12, 34, 56, null, null, null],但它却包含了一个意外的非空元素 32。这是为什么?

答案:

toarray() 方法文档指出:

如果数组可以容纳列表中的所有元素并留有空余(即,数组的元素比列表多),数组中紧跟在列表末尾后面的元素将设置为 null。

也就是说,当数组长度大于等于集合长度时,数组中紧跟在集合元素后面的第一个元素将被置为空。这在确定集合长度时很有用,前提是调用者知道集合不包含任何 null 元素。

实现:

以 arraylist 为例,其 toarray() 方法的实现如下:

public  T[] toArray(T[] a) {
    if (a.length < size> size) // 如果数组长度大于列表,将列表后面的第一个位置置为 null
        a[size] = null;
    return a;
}
登录后复制

结论:

在示例代码中,toarray() 方法将一个长度为 6 的数组传递给长度为 3 的列表,这导致数组中紧跟在列表元素后面的第一个元素 a[3](即 a[3])被置为空。数组的其他元素包含列表中的值。

以上就是Java List.toArray()方法的意外输出:为什么数组元素值并非预期?的详细内容,更多请关注慧达安全导航其它相关文章!

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部