【发布时间】:2020-02-08 20:11:47
【问题描述】:
我似乎无法在任何地方找到确切的方法。我正在编写一个将比较器作为类构造函数的参数/参数的类。我想用它来订购列表中的项目。但我不确定如何处理新类中的比较器。
- 我已经导入
java.util.Comparator - 在类声明中我说“
impements Comparator<T>” - 我已经写了 (
Comparator<T> c) 作为类的构造函数的参数。
我从来没有以这种方式使用过比较器——我将它用作内部类,仅此而已,所以当我将比较器作为构造函数的参数。
我做过的唯一事情就是上面的三个项目符号项。每当我尝试使用作为参数的比较器做某事时,我都会收到一条错误消息。
这是构造函数的代码:
public class SortedList<T> implements Comparator<T>
//value, position and array are instance variables
//I am switching array to a List to deal with generics
private int position;
private Integer[] array;
public SortedList(Comparator<T> c){
this.position = 0;
this.array = new Integer[25];
}
public void sort(Integer num){
boolean valid = false;
int i = 0;
while(!valid && i < array.length-1){
if(num.compareTo(array[i] > 0)){
array[i+1] = array[i];
array[i] = num;
}else{
i++;
}
}
我收到的错误消息是:
- 找不到符号 - 方法 compareTo
我希望能够比较任意两个对象,而不仅仅是整数,这就是我想将比较器作为参数的原因。
【问题讨论】:
-
你能分享你的代码吗?
TreeMap有一些构造函数需要Comparator作为参数 (OpenJDK 11 sources ofTreeMap) -
传递的参数只是一个实现
Comparator的实例,它可以像Comparator的任何其他实例一样传递给Collections.sort -
如果为构造函数提供了
Comparator,那么您就不需要implements比较器 - 只需使用它 - 但您没有显示可以使用它的代码,这样会有所帮助 -如果出现错误,请显示错误。 -
我刚刚添加了代码——抱歉花了这么长时间,我没有充实排序方法,因为我无法让比较器工作。
-
错误是找不到比较方法。我认为问题在于我不知道在这种情况下如何使用比较器。我无法创建比较器的实例(这是另一个错误消息)。我什至如何使它工作,以便我可以比较两个对象?理论上,我会比较其他类型的对象(这就是我想将比较器作为参数的原因),而不仅仅是整数,我只是用它来测试它。
标签: java comparator comparable