这两种写法通常指的是:
ans.toArray(new int[ans.size()][])ans.stream().toArray(int[][]::new)而在你的截图中,代码写的是 ans.stream().toArray(new int[ans.size()][]),这实际上是一种错误的混合写法(或者说是极其低效且语法可能报错的写法)。
下面详细讲讲直接转换和Stream 转换的区别,以及你截图中代码的问题:
ArrayList 的原生方法。它的底层直接调用 System.arraycopy,属于内存级别的拷贝。Stream 对象,建立流管道(Pipeline),然后通过收集器(Collector)或 toArray 终结操作来生成数组。这是关键点,你的截图代码可能无法通过编译或运行:
正确写法 A(List 直接转):
Java
// 接受一个“数组实例”作为模板
return ans.toArray(new int[ans.size()][]);
ans.size() 告诉 Java 提前分配好内存大小,避免扩容,效率最高。
正确写法 B(Stream 转):
Java
// 接受一个“构造函数引用” (Generator)
return ans.stream().toArray(int[][]::new);
注意这里括号里是 ::new,而不是 new int[...]。Stream 的 toArray 需要通过函数生成器来动态创建数组。