gpt4 book ai didi

java - 如何在Java中编写hashcode()方法?

转载 作者:行者123 更新时间:2023-12-02 10:57:19 26 4
gpt4 key购买 nike

我从来没有机会用 Java 编写哈希码函数,但现在我需要这样做。我该怎么办?

它用于 ArrayList,每个元素包含 5 个字符串,仅此而已。

我找到了一个包含 2 个字符串的 ArrayList 示例,它非常简单:

return 31 * lastName.hashCode() + firstName.hashCode();

我可以做一些同样简单的事情吗,即:

return 31 * field1.hashcode() + field2.hashcode() + field3.hashcode() + field4.hashcode() + field5.hashcode();

或者 hashcode() 方法还有其他要求吗?

我在这里找到了另一个关于 hashcode() 的 StackOverflow 讨论:Best implementation for hashCode method

据此,我模仿了其中一个答案并得出了这个:

return Objects.hash(this.mClientCode, this.mOrderNumber, this.mOrderDate, this.mTicketsSold, this.mSellerName);

这比我建议的第一个更好吗?为什么?

由于 hashcode() 和 equals() 显然应该总是同时更改,这是我的 equals():

   public boolean equals(Object o) {

if (!(o instanceof SalesItem)) {
return false;
}

SalesItem n = (SalesItem) o;

return n.mClientCode.equals(mClientCode) && n.mOrderNumber.equals(mOrderNumber) &&
n.mOrderDate.equals(mOrderDate) && n.mTicketsSold.equals(mTicketsSold) &&
n.mSellerName.equals(mSellerName);
}

看起来还可以吗?

最佳答案

你的平等几乎是正确的。如果这些值都不能为空,那就很好。如果可以,那么您还需要添加 null 检查 - if((n.lastName!= null && n.lastName.equals(lastname)) || (n.lastName == null && lastname == null))并对其他人重复。

对于哈希 - 您想要的是必须尽可能随机分布,并且对于您认为唯一的值来说是唯一的。我们很难告诉你一个好的哈希算法,因为我们不知道你的数据结构是如何使用的。例如,如果只有 4 个卖家,您希望该字段成为哈希中非常小的因素(如果有的话)。

这是数据库行的表示吗?看起来像一个。因为如果是的话,行的 rowId 或 UUID 将是最好的哈希值。

关于java - 如何在Java中编写hashcode()方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51625253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com