给我java.lang.com的comparto()方法可行的铸造错误
public int compareTo(Object copy){
if(copy==null){
throw new NullPointerException("Object entered is empty");
}
else if(copy.getClass()!=this.getClass()){
throw new IllegalArgumentException("Object entered is not Coord");
}
else{
Coord copy2 = (Coord)copy;
if(copy2.row==this.row && copy2.col==this.col){
return 0;
}
else if(copy2.col < this.col){
return -1;
}
else{
return 1;
}
}
}
thanks ...
要实现hashcode,您可以从对象覆盖默认实现:
@Override
public int hashCode()
{
return row ^ col;
}
这并不是一个理想的哈希,因为它的结果非常可预测,并且两个不同的对象很容易返回相同的值。更好的哈希将利用
Coord
)的内置
Arrays
类:
java.util
您可以使用此方法在任何数量的字段中生成一个很好的哈希。要实现CompareTo,您将希望您的班级实现
::
@Override
public int hashCode()
{
return Arrays.hashCode(new Object[]{new Character(row), new Character(col)});
}
一旦您完成了此操作,就可以使CompareTo进行类型public class Coord implements Comparable<Coord>
而不是类型Coord
的参数,这将为您节省检查其类型的麻烦。
hashcode是一个Object
(32位),您的数据是
int
(16位),所以我可能只是这样做:
char
这将来自前16位的位放置在最后16位中的位,因此这是此类的perfect哈希函数。
使用
@Override
public int hashCode() {
return (row << 16) + col;
}
,做:row
i在JoshuaBloch
撰写的《有效的Java书》中发现了有关此主题以及许多其他主题的非常有价值的信息。查看第45页,以获取有关HashCode()和equals()的更多信息。如果您使用像Eclipse这样的IDE,则可以让其生成
col
和Comparable
方法。对于您的班级,结果是:
public class Coord implements Comparable<Coord>
hashCode()