gpt4 book ai didi

java - 如何确保 hashCode() 与 equals() 一致?

转载 作者:IT老高 更新时间:2023-10-28 20:39:02 27 4
gpt4 key购买 nike

当覆盖 java.lang.Object 的 equals() 函数时,javadocs 建议,

it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

hashCode() 方法必须为每个对象返回一个唯一整数(这在根据内存位置比较对象时很容易做到,只需返回唯一整数地址对象)

应该如何重写 hashCode() 方法,以便它仅根据对象的属性为每个对象返回一个唯一整数


public class People{
public String name;
public int age;

public int hashCode(){
// How to get a unique integer based on name and age?
}
}
/*******************************/
public class App{
public static void main( String args[] ){
People mike = new People();
People melissa = new People();
mike.name = "mike";
mike.age = 23;
melissa.name = "melissa";
melissa.age = 24;
System.out.println( mike.hasCode() ); // output?
System.out.println( melissa.hashCode(); // output?
}
}

最佳答案

并不是说一个对象的哈希码必须是完全唯一的,只是说两个相等对象的哈希码返回相同的哈希码。让两个不相等的对象返回相同的哈希码是完全合法的。但是,哈希码分布在一组对象上的唯一性越高,您从 HashMap 和其他使用哈希码的操作中获得的性能就越好。

诸如 IntelliJ Idea 之类的 IDE 具有内置的 equals 和 hashCode 生成器,通常可以很好地为大多数对象提供“足够好”的代码(并且可能比一些手工制作的过于聪明的哈希函数更好)。

例如,这是 Idea 为您的 People 类生成的 hashCode 函数:

public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}

关于java - 如何确保 hashCode() 与 equals() 一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/410236/

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