看板 java 關於我們 聯絡資訊
我想透過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