gpt4 book ai didi

java - 如何创建比较器

转载 作者:行者123 更新时间:2023-12-02 05:16:31 25 4
gpt4 key购买 nike

假设我有泛型类

public class MyClass<T extends Comparable<T>> {
T a;

MyClass(T x) {
a = x;
}

public String toString() {
return a.toString();
}
}

我想让 Comparator 能够对充满 MyClass 元素的集合进行排序。

如果我这样写

public class MyComparator implements Comparator<MyClass> {
public int compare(MyClass o1, MyClass o2) {
return o1.a.compareTo(o2.a);
}
}

我收到警告未经检查的调用...

像这样编写比较器是否正确

import java.util.Comparator;

public class MyComparator<T extends Comparable<T>> implements Comparator<MyClass<T>> {
public int compare(MyClass<T> o1, MyClass<T> o2) {
return o1.a.compareTo(o2.a);
}
}

最佳答案

如果您希望 MyClassComparable,这样您就可以在不传入 Comparator 的情况下进行排序,这可以通过以下方式完成:

public class MyClass<T extends Comparable<T>> implements
Comparable<MyClass<T>> {
T a;

MyClass(T x) {
a = x;
}

public String toString() {
if (a == null) return "null";
return a.toString();
}

@Override
public int compareTo(MyClass<T> o) {
if (this.a == null) {
if (o == null || o.a == null) return 0;
return -1;
} else if (o == null || o.a == null) return 1;
return this.a.compareTo(o.a);
}
}

如果您确实想创建一个 MyClassComparator 那么它应该看起来像,

public class MyClass<T extends Comparable<T>> {
T a;

MyClass(T x) {
a = x;
}

public String toString() {
if (a == null) return "null";
return a.toString();
}
}

public class MyClassComparator<T extends Comparable<T>> implements
Comparator<MyClass<T>> {
@Override
public int compare(MyClass<T> left, MyClass<T> right) {
if (left == null) {
if (right == null) {
return 0;
}
return -1;
} else if (right == null) {
return 1;
}
if (left.a == null) {
if (right.a == null) {
return 0;
}
return -1;
} else if (right.a == null) {
return 1;
}
return left.a.compareTo(right.a);
}
}

关于java - 如何创建比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897027/

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