登录
首页 >  文章 >  java教程

Java List.toArray方法:为什么传入数组比List长时结果并非预期?

时间:2024-12-01 11:28:10 442浏览 收藏

哈喽!今天心血来潮给大家带来了《Java List.toArray方法:为什么传入数组比List长时结果并非预期?》,想必大家应该对文章都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习文章,千万别错过这篇文章~希望能帮助到你!

Java List.toArray方法:为什么传入数组比List长时结果并非预期?

java 中的 list.toarray

当我们使用 list.toarray 方法将 list 转换为数组时,可能会遇到与预期不同的结果。例如:

list<integer> 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, null, null]

实际输出: [12, 34, 56, null, 32, 1]

为什么会这样呢?

让我们深入了解 toarray 方法的文档说明:

"如果数组中的元素比列表多(即数组具有比列表更多的元素),数组中紧跟在列表末尾后的元素将设置为 null。(这在当调用者知道列表不包含任何 null 元素的情况下确定列表的长度时很有用。)"

这意味着,如果数组的元素比列表多,则紧跟在列表末尾后面的第一个元素将被设置为 null。这有助于在调用者得知列表不包含任何 null 元素时推断出列表的真实长度。

在给出的代码示例中,数组的元素(6 个)比列表中的元素(3 个)多。因此,列表末尾后面的第一个数组元素被设置为 null,从而产生实际的输出结果。

这个行为在 arraylist 的实现中得到证明:

public &lt;T&gt; T[] toArray(T[] a) {
    if (a.length &lt; 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 &gt; size)//如果数组的长度大于列表,把列表后面的第一个位置置为null
        a[size] = null;
    return a;
}

本篇关于《Java List.toArray方法:为什么传入数组比List长时结果并非预期?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>