对于数组列表,哪个更有效:collections.swap或使用临时变量进行交换?

问题描述

C:/Users/username/AppData/Local/Microsoft/WindowsApps

我想交换两个元素,但不知道哪个更有效。似乎两个交换的运行时间是相同的,但我不太确定。谢谢!

解决方法

我想交换两个元素,但不知道哪个更有效。似乎两个交换的运行时间是相同的,但我不太确定。

唯一可以确定的方法是编写适当的微基准,然后在多个硬件平台/ Java版本上运行它,并解释结果。

我们可以查看源代码,并做出一些有根据的 guesss ,但是我们不能从第一原理 1 推断出微观效率。

我的建议:

  • 以您认为最易读的方式编写代码,然后让编译器进行优化。他们通常可以比大多数程序员做得更好。
  • 如果您需要关注应用程序的性能,请编写应用程序基准测试,并使用探查器找出真实性能热点所在的位置。
  • 使用热点信息来确定在哪些地方值得花费更多的精力来手动调整应用程序……而不是您的直觉/猜测。

1-...除非这里的人对现实世界中的Java JIT编译器实际上如何在多个平台上工作不满,但对他们的脑海中的知识并不了解。如果有人这样,我们可能应该让他们休息,而不是让他们烦恼这样的问题:-)

,

Collections.swap是:

public static void swap(List<?> list,int i,int j) {
        // instead of using a raw type here,it's possible to capture
        // the wildcard but it will require a call to a supplementary
        // private method
        final List l = list;
        l.set(i,l.set(j,l.get(i)));
}

因此2个get和2个set与1个get和2个set相比。此外,Collections.swap很好地使用了set的返回值来绕过temp变量的使用。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...