如何防止重复对象添加到一个ArrayList [副本](How to prevent the add

2019-07-17 22:35发布

可能重复:
防止ArrayList中的重复项

我有一个特别的C类的ArrayList

List<C> myList = new ArrayList<C>();

C类有两个属性即

String str1;
String str2;

现在,当,当我加入C型到ArrayList myList中的对象,我想检查是否已经存在与str1和str2的匹配参数的值对象的值(str1和STR2)列表中的对象我要补充。

是否有任何有效的方式来做到这一点,而无需通过完整的列表,每次迭代和检查参数之间的匹配?

Answer 1:

你需要重写equals的C类方法

public boolean equals(Object c) {
    if(c !instanceof C) {
        return false;
    }

    C that = (C)c;
    return this.str1.equals(that.getStr1()) && this.str2.equals(that.getStr2());
}

然后,你可以调用myList.contains(即),看看是否列表中已包含相同的对象。

这是未经测试,您可能希望其他一些错误处理。

如果你重写equals方法这样,你也应该确保你重写了hashCode()方法的方法。 请参阅: http://www.technofundo.com/tech/java/equalhash.html

编辑 :正如在评论中指出,这组实施将是更有效的,但你仍然需要重载equals / hashCode方法使上面的例子中可以结合最好使用Karthiks回答以上。



Answer 2:

当你需要重复检查或保证唯一值,可以考虑使用一个设置 -如数据结构,而不是一个列表。

您可以从下面的一个选择 -

  • HashSet的

    • 更快的访问 - O(1)访问粗略地说。
    • 没有排序
    • 用作基础的存储的哈希表。
  • TreeSet中

    • 访问速度较慢的(相对于HashSet的) - O(日志(N))
    • 值自动排序。
    • 作为基本存储红黑树。

自动设置只允许唯一值。 试图添加先前存在失败值。

需要注意的是这个工作,你需要重写equalshashcode告诉Set如何比较的对象。 此步骤是在更好地解释哪些问题应该在Java中覆盖equals和hashCode时,应考虑?



Answer 3:

if (yourList.contains(Object object))
{
    // do not add
}


文章来源: How to prevent the adding of duplicate objects to an ArrayList [duplicate]