【发布时间】:2017-07-13 08:41:23
【问题描述】:
从速度和舒适度的角度来看,哪种方式最好?
names.sort( (a,b) -> a.getName().length() - b.getName().length() );
Collections.sort(names, Comparator.comparing( s -> Celebrity.getName().length() ))
BiFunction<Celebrity,Celebrity,Integer> bifunc = (a,b) -> Integer.compare(a.getName().length(), b.getName().length());
Collections.sort( names, bifunc::apply );
【问题讨论】:
-
请添加语言标签。
-
你为什么不衡量你的方法?
-
从正确开始(一个坏的解决方案没有多大价值)。然后优化可读性。一旦你确定了这两个并且可以证明系统的这个特定部分的性能是一个整体瓶颈,就可以分析和优化性能(也是谷歌“阿姆达尔定律”)。
-
@Flown 因为那么我应该有一个大数据集来获得正确的结果。这对我来说只是花絮。
-
使用
Comparator.comparingInt( s -> s.getName().length() ),注意comparingInt而不是comparing避免代码重复和装箱。虽然避免代码重复对性能没有影响,但它提高了代码质量并有助于避免错误,这一点更为重要。虽然 JIT 可以避免在第三个示例中不必要的BiFunction绕道和装箱的开销,但最好还是不要一开始就拥有它,特别是因为它在源代码方面也是令人费解的,并且还包含代码重复第一个变种
标签: java performance list java-8