我遵循了教程,但未能为我的Country
制作Comparable
班BST
。
主:
BinarySearchTree A = new BinarySearchTree();
Country a = new Country("Romania", "Bucharest", 1112);
A.insert(a);
国家/地区类:
public int compareTo(Object anotherCountry) throws ClassCastException {
if (!(anotherCountry instanceof Country))
throw new ClassCastException("A Country object expected.");
String anotherCountryName = ((Country) anotherCountry).getName();
int i = this.name.compareTo(anotherCountryName);
if(i < 0){
return -1;
} else {
return 0;
}
}
错误:
@Override
public int compareTo(Object anotherCountry) throws ClassCastException {
if (!(anotherCountry instanceof Country))
throw new ClassCastException("A Country object expected.");
String anotherCountryName = ((Country) anotherCountry).getName();
return this.name.compareTo(anotherCountryName);
Description Resource Path Location Type
名称冲突:类型为Country的方法compareTo(Object)具有与Comparable类型的compareTo(T)相同的擦除但不覆盖它Country.java / Lab2_prob 4 / src第17行Java问题
Description Resource Path Location Type
The method compareTo(Object) of type Country must override or implement a supertype method Country.java /Lab2_prob 4/src line 17 Java Problem
和班级:
public class Country implements Comparable<Country>{
private String name;
private String capital;
private int area;
Description Resource Path Location Type
类型Country必须实现继承的抽象方法Comparable.compareTo(Country)Country.java / Lab2_prob 4 / src第2行Java问题
答案 0 :(得分:19)
您的Country
课程应该实施Comparable
:
public class Country implements Comparable<Country>
然后您的compareTo
方法应如下所示:
@Override
public int compareTo(Country anotherCountry) {
return anotherCountry.getName().compareTo(this.name);
}
请注意compareTo
的签名。参数可以(且必须)属于Country
而不是Object
。这是因为Comparable
上的泛型类型参数而实现的。好处是你不必再检查类型了。缺点是你只能将Country
与其他Country
个对象(或它的子类型)进行比较,但在大多数情况下,无论如何这都是你想要的。如果不是,则必须更改类型参数。例如。如果您使用Comparable<Object>
,则compareTo
的签名可以再次为Object
。如果您愿意,可以阅读泛型here。
答案 1 :(得分:5)
Comparable应该返回:
负整数,零或正整数,因为此对象较少 比,等于或大于指定的对象。
但是,您的代码只返回-1或0,这是不正确的;这意味着this
可以小于另一个对象,或者相等,但不能更大!
无需修改name.compareTo()
返回的值 - 您可以直接返回它们。