如何避免在Set <object> </object>中重复

时间:2015-03-12 12:03:07

标签: java set

我有一个Set

final Set<Object> partialResults = new LinkedHashSet<Object>();

设置如下值:

partialResults.add(createResultList(data.getProduct(), data.getMaterialId()));

private List<Object> createResultList(final ProductModel product, final String code)
    {
        final List<Object> result = new ArrayList<Object>();
        result.add(product);
        result.add(code);
        return result;
    }

正在添加重复的产品;如何避免添加重复记录?

2 个答案:

答案 0 :(得分:2)

您的Set包含ArrayList个实例,每个实例包含一个ProductModel实例和一个String实例。为了使LinkedHashSet认为两个元素相等,它们必须具有相同的hashCode,并且equals方法在应用于它们时应返回true。

对于ArrayListhashCodeequals取决于hashCode元素的equalsArrayListString会正确覆盖hashCodeequals,这意味着您可能无法正确覆盖hashCode的{​​{1}}和equals

答案 1 :(得分:1)

要么做Eran建议,要么(看看手头的用例)改变你的逻辑使用HashMap而不是Set使用code字符串作为键和{ {1}}对象作为值。通过这种方式,您可以使用map.values()获得ProductModel的唯一集合,并避免在ProductModels中覆盖hashCodeequals的麻烦。