我正在尝试创建一个可以与同一类的实例进行比较的类,或者与String
.
例如,考虑以下情况:
public class Record implements Comparable<Record> {
public String name;
public Record(String name) {
this.name = name;
}
public int compareTo(Record o) {
return name.compareTo(o.name);
}
}
然后我将其放入ArrayList
如下:
ArrayList<Record> records = new ArrayList<Record>();
records.add(new Record("3"));
records.add(new Record("1"));
records.add(new Record("2"));
如果我然后对它们进行排序,它们就会正确排序:
Collections.sort(records);
但是,我不希望能够通过基于字符串的二进制搜索来获取记录。例如:
int index = Collections.binarySearch(records, "3");
问题是没有compareTo
将 String 作为参数的方法,我不确定如何实现它。
我试着做:
public class Record implements Comparable<Record>, Comparable<String> {
public String name;
public Record(String name) {
this.name = name;
}
public int compareTo(Record o) {
return name.compareTo(o.name);
}
public int compareTo(String o) {
return name.compareTo(o);
}
}
但是,当然,您不能多次使用不同的参数实现同一个接口。
所以,我正在寻找一种方法来完成上述工作。我已经查看了以下先前的答案,但还没有找到一个真正充分回答这个问题的答案。至少,如果是这样,我不明白。
- 使用 Scanner 的 compareTo 和 Strings
- 在Java中根据不同的数据成员对对象列表进行排序
- 一堆我现在没有链接的其他人......
基本上,我想做的是以下几点:
public int compare(Record r, String s) {
return r.name.compareTo(s);
}
不过,据我所知,如果不实现某种通用接口或超类,就无法比较不同类型的对象。我真的没有那个选项String
。
如果可能的话,有人可以告诉我如何做到这一点吗?谢谢。
更新 我意识到我可以执行以下操作:
Collections.binarySearch(records, new Record("3"));
但是,这不是我所追求的。谢谢。