这是我第一次发布问题。
请帮我解决我的问题。在这段代码中,我使用 HasMap 来存储键值对,这里的键是字符串,其中三个子字符串由“”空格分隔符分隔。
例如,
String t1 = new String("A B C");
and stored in HashMap as-
m.put(t1,27);
这里,A、B 和 C 是三个不同的字符串。假设 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());
}
}
}