java - 集合和列表的 contains 方法

标签 java collections

我有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/

相关文章:

java - 找到匹配的谓词。谓词的谓词?

java - 对 Java 集合使用泛型的意外行为

java - 在 Java 中加入字符串集合的首选习惯用法

java - 获取军事时区缩写

java - 为什么加起来是 11 而不是 8?

java - 如何在java中添加字符串和int的循环

java - 将 ArrayList 添加到嵌套在 Map 中的队列

Java ActiveMQ - 如何将过期消息发送到另一个队列

java - 有效的方法反转来反转 HashMap ,其中少量的键映射到相同的值

java - java 检查列表 A 中存在于列表 B 中的元素数量