Java 我的hashcode无法工作-我的equals()是否有问题?;
每当我尝试运行此程序时,都会得到以下输出: 6150 五千 1015612567 名单上的人: {人A=100,人B=50} 下一步: Person:Person A哈希代码:507806258值:100 下一步: 人员:人员B哈希代码:507806309值:50Java 我的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
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的输出,什么都没有。问题是什么?我还没有测试您的所有代码,所以如果您仍然遇到一些问题,请提出问题,我将对此进行调查。