我正在尝试为我的简单类生成 hashCode() 方法,但我没有得到任何结果。我将不胜感激任何帮助。我已经实现了 equals() 方法,如下所示,并且还想知道是否需要实现compareTo() 方法。我已经导入 java.lang.Character 来使用character.hashCode(),但它似乎不起作用。
private class Coord{
private char row;
private char col;
public Coord(char x, char y){
row = x;
col = y;
}
public Coord(){};
public char getX(){
return row;
}
public char getY(){
return col;
}
public boolean equals(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 true;
else
return false;
}
}
}
提前致谢...
comparTo() 方法给我 java.lang.Comparable 转换错误..
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;
}
}
}
谢谢...
要实现 hashCode,您可以覆盖 Object 的默认实现:
@Override
public int hashCode()
{
return row ^ col;
}
这并不是一个真正理想的哈希,因为它的结果是非常可预测的,并且很容易用于两个不同的哈希Coord
对象返回相同的值。更好的散列将利用内置的Arrays
班级来自java.util
(http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html):
@Override
public int hashCode()
{
return Arrays.hashCode(new Object[]{new Character(row), new Character(col)});
}
您可以使用此方法生成具有任意数量字段的相当好的哈希值。
要实现compareTo,您需要您的类实现可比 http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html:
public class Coord implements Comparable<Coord>
完成此操作后,您可以使compareTo采用类型参数Coord
而不是打字Object
,这将省去您检查其类型的麻烦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)