我試圖創建一個類,可以將其與相同類的實例進行比較,也可以創建一個類到String
。Java與實例或字符串類似
例如,請考慮以下幾點:
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"));
如果我再對它們進行排序,它們是正確排序:
但是,我不希望能夠通過基於字符串的二進制搜索來獲得記錄。例如:
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
我真的沒有這個選擇。
有人可以告訴我如何做到這一點,如果有可能?謝謝。
UPDATE 我知道我可以做到以下幾點:
Collections.binarySearch(records, new Record("3"));
但是,這不是我後。謝謝。
在Java中,你總是** **都有一個共同的超類,'Object' 。 – 2013-02-25 19:41:44
@PatriciaShanahan如果我使用「可比較的
是int包含int那**始終**列表? – skuntsel 2013-02-25 19:44:26