作者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
1F:推 adrianshum:差点给骗到了 XDDD 老问题, string comparison 做错了 05/22 15:01
2F:推 superlubu:话说... contains() 那边你这样写不会有问题吗? 05/22 15:02
3F:→ hstt:请问是指string要用equals来做吗?不过为啥放在SET时却正常@@ 05/22 15:08
4F:推 zeat:String的比对要使用equals()方法... 很多人会忘了@@ 05/22 15:49
5F:推 adrianshum:hstt:一来我不知道你怎样测, 二来不肯定是怎样 "正常" 05/22 16:14