我有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 方法之间存在差异?
最佳答案
HashSet<ViewPartner>
无法正常工作,因为 ViewPartner 未实现 hashCode()
。阅读Object.equals API:每当重写hashCode方法时,通常都需要重写该方法,以维护hashCode方法的通用约定,即相等的对象必须具有相等的哈希码。>
关于java - 集合和列表的 contains 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133803/