哪个更快?使用自定义比较器类或lambda函数

哪个更快?使用自定义比较器类或lambda函数,lambda,java-8,heap,comparator,treemap,Lambda,Java 8,Heap,Comparator,Treemap,我正在尝试用java创建一个排序映射(按键的降序排序)。 我试过了 Map Map=newtreemap((a,b)->(b-a)); 如果我为同一个任务编写一个Comparator类,会不会对性能产生影响?您永远不会感觉到显式创建类与运行时通过lambda表达式隐式为您创建类之间的区别 您可能想要改进的是代码的可读性,这不是更容易理解吗 new TreeMap<>(Comparator.reverseOrder()); newtreemap(Comparator.reverse

我正在尝试用java创建一个排序映射(按键的降序排序)。 我试过了

Map Map=newtreemap((a,b)->(b-a));

如果我为同一个任务编写一个Comparator类,会不会对性能产生影响?

您永远不会感觉到显式创建类与运行时通过lambda表达式隐式为您创建类之间的区别

您可能想要改进的是代码的可读性,这不是更容易理解吗

new TreeMap<>(Comparator.reverseOrder());
newtreemap(Comparator.reverseOrder());

首先,
(a,b)->(b-a)
这是错误的;第二,它在引擎盖下是一样的(几乎),你永远不会觉得差异B-a没有错,因为我希望它按降序排序。我的错。我应该提到,
(a,b)->(b-a)
被破坏了,因为
a
b
之间的差异不适合
a
b
的值类型。对于
Integer
,两个值之间的最大差值是
Integer.MIN\u值
Integer.MAX\u值
之间的差值,即2²-1,或者是
Integer.MAX\u值
的两倍。因此,您的比较器可能会溢出。正确的实现应该是
(A,b)->整数。比较(b,A)
(A,b)->b.compareTo(A)
,其作用与
Comparator.reverseOrder()相同。底线是,不要试图通过减法实现比较器来变得聪明。我使用了
b-a
,因为我所有的整数都是正的,
b-a
compareTo()
方法快。这也很重要,因为我问这个问题是因为我想知道竞争性编码场景中的性能影响。我想要的是实现一个
树映射
,因为输入大小在
整数范围内。MAX_值-1000
当所有值都为正值时,这个使用差值的比较器将工作,但我怀疑您是否曾就
(a,b)->(b-a)
(a,b)快的说法制定过有效的基准->Integer.比较(b,a)
(a,b)->b.比较(a)
,分别<代码>比较器。反转顺序()
。但是,当然,“竞争性编码场景”往往意味着无论如何都是无效的度量,因此较高的初始化成本可能会起作用。在这种情况下,在大多数情况下,使用现有的比较器(如
comparator.reverseOrder()
)将获胜。
new TreeMap<>(Comparator.reverseOrder());