List.toArray是选(T[0])还是(T[size])

List.toArray(T[])方法用于将集合转为数组,一般有两种写法,因为我在公司看了很多次不是很理解这个东西,所以记录了这篇博客

  • toArray(new T[0])
  • toArray(new T[size])
// Arraylist的toArray(T[] a)源码
public <T> T[] toArray(T[] a) {
checkForComodification();
if (a.length < size)
return (T[]) Arrays.copyOfRange(
root.elementData, offset, offset + size, a.getClass());
System.arraycopy(root.elementData, offset, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}

 

公司里一直都是用第一种写法,deepseek说为什么他优于第二种:

不仅仅是写的简单,而且JVM的优化加持下,T[0]甚至在某些情况下优于t[size](因为jit编译器优化数组分配)

在并发集合中,size()计算可能不准确,这种情况就更不如0了。

 

此外其实还可以toArray(),这里返回的是Object[ ],需要自己强制转换

// toArray()源码
public Object[] toArray() {
checkForComodification();
return Arrays.copyOfRange(root.elementData, offset, offset + size);
}
posted @ 2025-07-24 23:12  天启A  阅读(10)  评论(0)    收藏  举报