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);
}

浙公网安备 33010602011771号