Java 我的hashcode无法工作-我的equals()是否有问题?;

Java 我的hashcode无法工作-我的equals()是否有问题?;,java,dictionary,hashmap,hashcode,Java,Dictionary,Hashmap,Hashcode,每当我尝试运行此程序时,都会得到以下输出: 6150 五千 1015612567 名单上的人: {人A=100,人B=50} 下一步: Person:Person A哈希代码:507806258值:100 下一步: 人员:人员B哈希代码:507806309值:50 String name; int day; static Map<String, Integer> people = new HashMap<>(); public PeopleHash(String na

每当我尝试运行此程序时,都会得到以下输出:

6150

五千

1015612567

名单上的人:

{人A=100,人B=50}

下一步:

Person:Person A哈希代码:507806258值:100

下一步:

人员:人员B哈希代码:507806309值:50

String name;
int day;

static Map<String, Integer> people = new HashMap<>();

public PeopleHash(String name, int day) {
    this.name = name;
    this.day = day;

}

public String getName() {
    return name;
}

public int getDay() {
    return day;
}

public boolean equals(PeopleHash other) {
    if (other instanceof PeopleHash) {
        PeopleHash d = (PeopleHash)other;
        return name == d.name && day == d.day;
    } else {
        return false;
    }
}

@Override
public int hashCode() {
    return 50 * day;
}

public PeopleHash peopleEntry(){
    String namn = "A";
    int schiffre = 123;
    return null;
}


public static void main(String[] args) {


    PeopleHash p1 = new PeopleHash("Isolde", 123);
    PeopleHash p2 = new PeopleHash("Jean", 100);

    people.put("Person A", 100);
    people.put("Person B", 50);



    System.out.println(p1.hashCode());
    System.out.println(p2.hashCode());



    System.out.println("People in list: \n" + people);

    for (Entry<String, Integer> entry : people.entrySet()) {
        String a = entry.getKey();
        int b = entry.getValue();

        System.out.println("Next:");
        System.out.println("Person: " + a + " Hashcode: " + entry.hashCode() + " Value: " + b);

    }

}
}


我做错了什么?

散列/等于本身是正常的。问题在于使用与否

“Person:”输出显示object entry.hashCode的哈希代码,与p1/p2无关。映射中的条目由字符串键添加,p1/p2对象被丢弃

映射可能应该声明为Map,以便使用HashPerson的equals/hashCode。个人对象应直接用作键:

people.add(p1, 1234);
然后循环可以这样写:

for (Entry<HashPerson, Integer> entry : people.entrySet()) {
   HashPerson person = entry.getKey();
   Integer value = entry.getValue();

   System.out.println(
     String.format("Person %s HashCode: %d Value: %d",
       person.getName(), person.hashCode(), value));
}

也许equals方法肯定有问题。试试这个-

public boolean equals(Object other) {

            if (other instanceof PeopleHash) {
           PeopleHash d = (PeopleHash)other;
           return name.equals(d.name) && day == d.day;
  }
   return false;
}
要比较对象,请使用该方法。您已经使用签名PeopleHash.equalsPeopleHash定义了一个新方法

将方法签名更改为

@Override
public boolean equals(Object other) {

始终建议添加@Override注释,因为如果您定义的方法未重写另一个方法,编译器将向您发出警告。

哦,对不起。我没有得到1015612567的输出,什么都没有。问题是什么?我还没有测试您的所有代码,所以如果您仍然遇到一些问题,请提出问题,我将对此进行调查。