当前位置: 首页 > 面试题库 >

如何防止将重复对象添加到ArrayList

羊舌庆
2023-03-14
问题内容

我有一个特定的类C的arraylist。

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

C类具有两个属性,即。

String str1;
String str2;

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

有什么有效的方法可以执行此操作,而不必每次都遍历完整列表并检查参数之间是否匹配?


问题答案:

您需要重写equalsC类中的方法。

例如

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(viz)来查看列表是否已包含相等的对象。

这未经测试,您可能需要一些其他错误处理。

如果确实这样重写equals方法,则还应确保重写hashcode()方法。请参阅:http
:
//www.technofundo.com/tech/java/equalhash.html

编辑 :正如评论中指出的那样,尽管仍然需要重写equals /
hashcode方法,但是set实现将更加高效,因此上面的示例可能最好与上述Karthiks答案结合使用。



 类似资料:
  • 所以我的目标是把一个字符串拆分成一个Word对象数组。我只想要一个对象来表示一个英语单词,这意味着在添加到数组之前应该过滤掉重复的单词。我一辈子都不知道为什么我过滤掉重复单词的标准失败了。我已经尝试了ArrayList和HashSet。我的目标是在字符串中计算该单词的实例,但我还没有实现。 我的单词分类是: 这是我当前的输出: 单词集大小:18 |单词列表大小:18 word: the | cou

  • 我想知道如何防止这种情况发生? 问题是,创建对象剥离类装饰器,构造函数逻辑等的对象。如何明确防止此行为? 当涉及到像这样的对象时,还有另一个反序列化问题。有时,我有这样的课程: 像这样的类必须通过<code>JSON反序列化。解析(“一些字符串”)但反序列化后,它们也会作为“从头开始的对象”出现。所以,任何装饰器都不存在了,任何构造器逻辑都不存在,元也不存在了。例如。

  • 问题内容: 如何将对象添加到数组(使用javascript或jquery)?例如,此代码有什么问题? 我想使用此代码在function1数组中保存许多对象,并调用function2在数组中使用该对象。 如何将对象保存在数组中? 如何将对象放入数组并将其保存到变量? 问题答案: 使用Array.push()将任何东西放入数组。 有关数组的更多信息 一次添加多个项目 将项目添加到数组的开头 将一个数组

  • 问题内容: 这是我的对象文字: 我如何添加字段与对象? 问题答案: 有两种向对象添加新 属性的 方法: 使用点表示法: 使用方括号表示法: 当您知道属性名称时,将使用第一种形式。动态确定属性名称时,使用第二种形式。像这个例子: 甲 真实 JavaScript数组可使用任一构造: 数组文字符号: 数组构造器符号:

  • 问题内容: 我想向中添加一个对象,但是每次我向具有3个属性的新对象添加时,都会出现错误。 在这里,我正在尝试创建其对象并将其传递给的类。 问题答案: 创建对象时需要使用运算符 要不然 并且您的构造函数不应包含。否则它将成为您班上的一个方法。

  • 我有一个Employee类有2个属性id和name。我正在重写hashcode和equals方法,如下所示。 Employee.java: 现在我有了一个测试类,我正在创建一个名为“Chris Gayle”的employee类的对象,并将其添加到HashSet中。之后,我将这个现有的employee对象的名称修改为“Kieron Pollard”,并将这个修改后的employee对象再次添加到Ha