
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]
立即学习“Java免费学习笔记(深入)”;
为什么会这样呢?
让我们深入了解 toarray 方法的文档说明:
"如果数组中的元素比列表多(即数组具有比列表更多的元素),数组中紧跟在列表末尾后的元素将设置为 null。(这在仅当调用者知道列表不包含任何 null 元素的情况下确定列表的长度时很有用。)"
这意味着,如果数组的元素比列表多,则紧跟在列表末尾后面的第一个元素将被设置为 null。这有助于在调用者得知列表不包含任何 null 元素时推断出列表的真实长度。
在给出的代码示例中,数组的元素(6 个)比列表中的元素(3 个)多。因此,列表末尾后面的第一个数组元素被设置为 null,从而产生实际的输出结果。
这个行为在 arraylist 的实现中得到证明:
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)//如果数组的长度大于列表,把列表后面的第一个位置置为null
a[size] = null;
return a;
}以上就是Java List.toArray方法:为什么传入数组比List长时结果并非预期?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号