【发布时间】:2013-02-25 19:38:57
【问题描述】:
我正在尝试创建一个可以与同一类的实例或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);
}
}
但是,当然,您不能多次使用不同的参数实现同一个接口。
所以,我正在寻找一种方法来执行上述操作。我已经查看了以下先前的答案,但还没有找到一个真正充分回答这个问题的答案。至少,如果是这样,我不明白。
- compareTo and Strings using a Scanner
- Sorting a list of objects based on different data members in Java
- 一堆我现在没有链接的其他人...
基本上,我想做的是以下几点:
public int compare(Record r, String s) {
return r.name.compareTo(s);
}
据我所知,如果不实现某种通用接口或超类,就无法比较不同类型的对象。我真的没有String 的选项。
如果可能的话,有人可以告诉我如何做到这一点吗?谢谢。
更新 我意识到我可以做到以下几点:
Collections.binarySearch(records, new Record("3"));
但是,这不是我所追求的。谢谢。
【问题讨论】:
-
在 Java 中,您总是有一个共同的超类,
Object。 -
@PatriciaShanahan 如果我使用
Comparable<Object>,那是否允许与String或Record以外的对象进行比较? -
int包含在总是列表中吗?
-
@crush 如果您不喜欢该类型,可以在运行时抛出 ClassCastException。
-
@skuntsel 我的意思是在上下文中可能会显示为 Comparable 的泛型类型。
标签: java arraylist compare comparable compareto