gpt4 book ai didi

java - Comparator.compare() 是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 14:04:22 28 4
gpt4 key购买 nike

学习 Kotlin,我试图了解 Java 的 Comparator接口(interface)有效 - 主要是 compare() 函数,这样我就可以利用它。

我已经尝试阅读 compare() 的文档,但我想要一个更简单的解释它是如何工作的。

迭代列表时 compare(x, y) 中的 xy 到底是什么?迭代时它是否目标并比较每对数字?例如:

arrayOf(1, 2, 3, 4)

它会比较 1 和 2(x 和 y),然后比较 2 和 3(x 和 y),然后比较 3 和 4(x 和 y)吗?

我有一个 Kotlin 函数,它提供了一个比较器来按降序对列表进行排序:

import java.util.*

fun getList(): List<Int> {
val arrayList = arrayListOf(1, 5, 2)
Collections.sort(arrayList, object: Comparator<Int> {
override fun compare(x: Int, y: Int){
return x < y
}
} )
return arrayList

我不确定为什么上面的函数不是完成该任务的正确语法。

最佳答案

这可以归结为javadoc中的这句话。 :

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

这就是全部内容了。当您编写比较器时,您可以定义您想要的顺序。关键是您的方法返回 -1、0 或 1。具体取决于您想要这两个传入参数的排序方式。 (是的,它不需要 -1 或 1,只需负数、零、正数)。

换句话说:关键是 compare() 在该合约中服务。它定义了两个元素的顺序。这就是全部内容。

在对数据进行排序时,每次底层排序代码需要知道两个元素的顺序时都会调用它。因此,这些调用发生的确切“顺序”以及传递的参数取决于实际的排序算法以及您打算排序的数据。

从这个角度来看,您的问题意味着您对整个主题的思考有些过度。简单理解:当您打算为对象/值定义“自定义”顺序时,您可以使用比较器。

为 int、Int 或 Integer 定义“自己的”比较器是没有意义的,因为这些类已经定义了它们的自然顺序,所以已经有了 Integer.compare()例如。为此类类定义自己的比较器的唯一用例是当您想要以不同的方式对它们进行排序时。但最有可能的是,您仍然会使用现有的比较器功能,并使用其他内置方式,例如反转“自然”顺序。

关于java - Comparator.compare() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54943819/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com