问题描述
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变量的使用。