gpt4 book ai didi

java - 比较静态类中使用的参数

转载 作者:行者123 更新时间:2023-11-30 04:41:03 29 4
gpt4 key购买 nike

Sedgewick 的算法书中有一段代码我不太理解,特别是关于比较器的部分。我非常清楚其他一切是如何工作的,例如提供的算法、使用比较器与可比较器的意图等。但是,我似乎没有得到的一件事是比较的参数(Transaction v, Transaction w ) 静态类中的方法。例如,对象数组由另一个排序的对象引用传递和保存。当调用辅助方法 less() 时,Object 数组的两个元素由另一个 Object 引用保存。但这是我不明白的:在

    public static class WhoOrder implements Comparator<Transaction> {
public int compare(Transaction v, Transaction w) {
return v.who.compareTo(w.who);
}
}

对象引用似乎已被事务引用取代。怎么会这样呢?对于多态性,您必须使用显式的向下转型,但这似乎绕过了这一点。我的猜测是因为参数化类型,但我不知道为什么会这样。

包含实现 Comparator 的静态类的类

public class Transaction {
private final String who; // customer
private final Date when; // date
private final double amount; // amount

...


// ascending order of account number
public static class WhoOrder implements Comparator<Transaction> {
public int compare(Transaction v, Transaction w) {
return v.who.compareTo(w.who);
}
}

public static void main(String[] args) {
...
Arrays.sort(a, new Transaction.WhoOrder());
}

排序类:

// use a custom order and Comparator interface - see Section 3.5
public static void sort(Object[] a, Comparator c) {
int N = a.length;
for (int i = 0; i < N; i++) {
for (int j = i; j > 0 && less(c, a[j], a[j-1]); j--) {
exch(a, j, j-1);
}
}
}

// is v < w ?
private static boolean less(Comparator c, Object v, Object w) {
return (c.compare(v, w) < 0);
}

// exchange a[i] and a[j]
private static void exch(Object[] a, int i, int j) {
Object swap = a[i];
a[i] = a[j];
a[j] = swap;
}

最佳答案

WhoOrder 被实现为一个 Comparator,以 Transaction 作为其类型参数,因此 compare 的实现接受两个交易。但是,less 方法采用原始的Comparator(没有类型)。为了向后兼容,执行此操作时,泛型类型检查被禁用,因此您可以将 2 个对象传递给比较

关于java - 比较静态类中使用的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299851/

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