我正在尝试为我的简单类生成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; } } }
提前致谢…
正在给我java.lang.Comparable转换错误的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; } } }
谢谢…
要实现hashCode,您可以覆盖Object的默认实现:
@Override public int hashCode() { return row ^ col; }
这实际上不是理想的哈希,因为它的结果非常可预测,并且两个不同的Coord对象很容易返回相同的值。更好的哈希将利用(http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)中的内置Arrays类:java.util
Coord
Arrays
java.util
@Override public int hashCode() { return Arrays.hashCode(new Object[]{new Character(row), new Character(col)}); }
您可以使用此方法生成具有任意多个字段的很好的哈希。
要实现compareTo,您将希望您的类实现Comparable:
public class Coord implements Comparable<Coord>
完成此操作后,您可以使compareTo接受type Coord而不是type 的参数Object,这将省去检查其类型的麻烦。
Object