作者hstt ()
看板java
標題[問題] HashMap: 使用自定類別當作key
時間Fri May 22 14:52:48 2009
我想透過HashMap來實作一個如此的mapping:
key value
(a,b) or (b,a) 1
也就是說不考慮a,b 的順序 (a,b) (b,a)視為相同的元素
主要是想要紀錄此配對出現的次數
因此我建立了一個class如下 並複寫了equals()跟hashCode()
public class Pair {
private String x;
private String y;
public Pair(String x, String y){
this.x = x;
this.y = y;
}
public boolean contains(String s){return x == s || y == s;}
@Override public boolean equals(Object o){
if(o == null)
return false;
Pair p = ((Pair)o);
return p.contains(x) && p.contains(y);
}
@Override public int hashCode(){
return x.hashCode() + y.hashCode();
}
}
當我將Pair用在Set<>測試時 都很正常 但放到HashMap用時
ketSet().contains()卻變的不是照我所複寫的method去做判斷
想請問這是哪方面的問題?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 134.208.2.179
推 adrianshum:差點給騙到了 XDDD 老問題, string comparison 做錯了 05/22 15:01
推 superlubu:話說... contains() 那邊你這樣寫不會有問題嗎? 05/22 15:02
→ hstt:請問是指string要用equals來做嗎?不過為啥放在SET時卻正常@@ 05/22 15:08
推 zeat:String的比對要使用equals()方法... 很多人會忘了@@ 05/22 15:49
推 adrianshum:hstt:一來我不知道你怎樣測, 二來不肯定是怎樣 "正常" 05/22 16:14