gpt4 book ai didi

java - 具有覆盖 hashcode() 和 equals() 的 HashMap 在我的情况下不起作用

转载 作者:行者123 更新时间:2023-11-30 08:29:30 25 4
gpt4 key购买 nike

这是我第一次发布问题。

请帮助我解决我的问题。在这段代码中,我使用 HasMap 来存储键值对,这里的键是字符串,三个子字符串由“”空格分隔符分隔。

例如,

String t1 = new String("A B C");
and stored in HashMap as-

m.put(t1,27);

这里,A、B、C是三个不同的String。假设 A、B、C 的不同组合是唯一的。

Like "A B C", "B A C", "C B A" are all treated as equal.

我为此实现了 hashCode() 和 equal(),下面的代码应该只打印

A B C:61046662

但它甚至没有调用 hashCode() 或 equals()。请给我一些建议。

public class Test {
public int hashCode(){
System.out.println("hashcode method called");
return this.toString().length();
}

public boolean equals(Object obj) {
System.out.println("equal method called ");
int count = 0;
if(!(obj instanceof String))
return false;
if (obj == this)
return true;
count = 0;
StringTokenizer st = new StringTokenizer(((String)obj).toString(), " ");
while(st.hasMoreTokens()){
if(this.toString().contains(st.nextToken())){
count ++;
}
}
return (count == 3);
}

public static void main(String[] args) {

HashMap<String, Integer> m = new HashMap<String, Integer>();

String t1 = new String("A B C");
String t2 = new String("B A C");
String t3 = new String("C B A");

m.put(t1, 27);
m.put(t2, 34);
m.put(t3, 45);

System.out.println(m.get("A B C"));

for(Entry e : m.entrySet()){
System.out.println(((String)e.getKey())+":" +e.getKey().hashCode());
}
}
}

最佳答案

你的 equals()hashCode()方法不会出现在图片中,因为映射键的类型是 String , 不是 Test 类型.因此正在使用标准字符串比较和哈希码。

您需要修改 Test以便它保存字符串,并更改 equals()hashCode()因此。然后,您需要将 map 更改为 HashMap<Test,Integer> 类型.

关于java - 具有覆盖 hashcode() 和 equals() 的 HashMap 在我的情况下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19400222/

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