這是我第一次發佈問題。重寫hashcode()和equals()的HashMap在我的情況下不起作用
請幫我解決我的問題。 在這段代碼中,我使用HasMap來存儲鍵值對,這裏的鍵是帶有三個由「」空格分隔符分隔的SubStrings的String。
例如,
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()和等於(), 下面的代碼應該只打印
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());
}
}
}
兩者彼此不相關。您完全沒有使用Test class – Raghav