如何为特定类编写哈希码方法? 我正在尝试为我的简单类生成HashCode()方法,但我没有任何地方。感谢任何帮助。我已经实现了equals()方法,看起来如下,并且w ...

问题描述 投票:0回答:2

给我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
java class character hashcode compareto
2个回答
22
投票
Http://docs.oracle.com/javase/7/docs/api/java/java/java/arrays.html

)的内置

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

哈希函数。

15
投票

使用

@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>


与Durron597的答案相似,如果您的输入是由char(0到65535之间)界的,则可以尝试一下

hashCode()

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.