使用 toArray 方法将 ArrayList 转换为数组时,有两种选项用于指定数组的大小:调整数据库的大小或一个空的数据库。让我们探讨一下它们对性能的影响。
假设我们有一个ArrayList称为 myList,我们可以使用以下语法来创建数组:
MyClass[] arr = myList.toArray(new MyClass[myList.size()]); // Presized array MyClass[] arr = myList.toArray(new MyClass[0]); // Empty array
直观上,调整数组大小可能看起来更有效,但使用 Java Microbenchmark Harness (JMH) 的基准测试结果揭示了一个令人惊讶的发现。使用空大小参数 (new MyClass[0]) 创建数组的性能始终优于预先调整大小的版本 (new MyClass[myList.size()])。
JVM 和 JIT 编译器进行了优化,可以有效地创建和初始化正确大小的数组。通过提供空数组,编译器可以利用这些优化,从而获得更好的性能。随着数组大小的增加,这种优势尤其明显。
以下是基准测试结果:
Size | Presized Array (μs) | Empty Array (μs) |
---|---|---|
1 | 0.025 | 0.019 |
100 | 0.155 | 0.133 |
1000 | 1.512 | 1.075 |
5000 | 6.884 | 5.318 |
10000 | 13.147 | 10.652 |
100000 | 159.977 | 139.692 |
如您所见,空数组方法提供了轻微但一致的性能优势。但是,请务必注意,这些结果可能会有所不同,具体取决于特定的 JVM 和 JIT 编译器优化以及数据的大小和特征。
以上是数组大小如何影响 Java 中 ArrayList 到数组的转换性能?的详细内容。更多信息请关注PHP中文网其他相关文章!