【发布时间】:2015-03-23 21:40:03
【问题描述】:
我有 ViewPartner 类
public class ViewPartner {
private int id;
private boolean enabled;
public ViewPartner(int id, boolean enabled) {
this.id = id;
this.enabled = enabled;
}
@Override
public boolean equals(Object o){
if(o instanceof ViewPartner){
return id == ((ViewPartner) o).id;
} else {
return false;
}
}
}
以及包含以下方法的ViewPartnerContainer 类:
public class SelectedViewPartnerContainer {
private Map<Integer, List<ViewPartner>> cahcedPagePartnersMap;
private Set<ViewPartner> rawPartners;
//GET, SET ,Contructor and other methods
public Collection<ViewPartner> getRawPartners(Set<ViewPartner> partners){
for(ViewPartner vp : partners){
if(rawPartners.contains(vp)){
partners.add(vp);
}
}
return partners;
}
}
现在我有以下代码:
SelectedViewPartnerContainer c = new SelectedViewPartnerContainer();
Set<ViewPartner> partners = new HashSet<ViewPartner>();
List<ViewPartner> rawLst = new ArrayList<ViewPartner>();
for(int i = 40; i < 50; i++){
rawLst.add(new ViewPartner(i, false));
}
for(int i = 37; i < 42; i++){
partners.add(new ViewPartner(i, true));
}
//adding rawLst to the c's rawPartners property
ViewPartner p2 = new ViewPartner(40, false);
Collection<ViewPartner> co = c.getRawPartners(partners);
List<ViewPartner> co2 = new ArrayList(c.getRawPartners(partners));
co.contains(p2); //false
co2.contains(p2); //true
为什么与 contains 方法有区别?
【问题讨论】:
-
你的equals方法违反了它和hashCode方法之间的约定
-
@MadProgrammer hashCode 方法与等于和包含有什么关系?
-
有一个合同要求,equals 和 hashCode 应该为对象返回相同的值(所以如果两个对象相等,它们将具有相同的 hashCode)
标签: java collections