当前位置: 首页 > 知识库问答 >
问题:

检查两个对象在数组列表中是否相等

姬俊远
2023-03-14

我有一个创建Element类型arraylist的主类:

public static void main(String[] args) throws IOException {
String input = "";
String id = ""; //combination of letters and numbers
String name = "";

ArrayList<Element> element = new ArrayList<> ();

BufferedReader in = new BufferedReader( new InputStreamReader(System.in));

while(!(input.equalsIgnoreCase("quit"))) {
    System.out.println("Please enter 'e' to enter an element, or 'quit' to quit");
    input = in.readLine();

if(input.equalsIgnoreCase("e")) {

    System.out.println("Please enter a name for the element");
    name = in.readLine();

    System.out.println("Please enter an id for the element");
    id = in.readLine(); 

    element.add(new Element(name,id));
    //only add if id and name don't exist already
}

}

}

然后我有一个元素clas:

public class Element {

private String name;
private String id;

public Element(String name, String id) {

this.name = name;
this.id = id;

}


}

我想在将一个元素添加到列表(它的id和名称)之前进行检查,以检查列表中已经存在的另一个元素是否已经具有这些精确值(id和名称)。我知道我可以使用toString方法来实现这一点,但我不确定如何在将元素添加到列表之前重写它以传递id和名称。他们是这样做的吗?理想情况下,我只想添加一个元素,如果它还不存在的话。

共有3个答案

冷宏茂
2023-03-14

重写元素类的等于方法。使用列表的方法检查元素是否已经在列表中。

苏墨竹
2023-03-14

您应该使用集。它是一种数据结构,完全按照您的要求执行-它不能包含重复项。为了使集合工作,您应该正确实现类的equals()和hashCode()方法。

路裕
2023-03-14

下面重写的等于方法将起作用。

public class Element {
    private String name;
    private String id;

    public Element(String name, String id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Element){
            Element element = (Element) obj;
            if(element != null && this.name.equals(element.name) && this.id.equals(element.id)){
                return true;
            }
        }
        return false;
    }
  }

然后在添加到您的列表之前尝试进行检查,如下所示:

        ArrayList<Element> element = new ArrayList<Element> ();
        Element element1 = new Element("a", "1");
        Element element2 = new Element("b", "2");
        Element element3 = new Element("b", "2");
        element.add(element1);
        element.add(element2);
        if(element.contains(element3)){
            System.out.println("Yes");
        } else{
            System.out.println("No");
        }

下面是包含Java实现的代码:

您应该关注的部分是-o.equals(elementData[i]。对象的内部equals方法将用于进行equals检查,如果您没有覆盖equals方法,那么将比较2个对象的内存位置,并且由于它将是不同的ArrayList.contains将返回false,因此通过覆盖equals方法,我们正在建立一个逻辑条件,即何时将2Element对象视为相同。

public boolean contains(Object o) {
    return indexOf(o) >= 0;
}

  public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
            if (elementData[i]==null)
                return i;
    } else {
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}
 类似资料:
  • 我有一个String类型的数组列表和一个Person类型的数组列表。其中,Person是一个仅包含包含名称的字符串的对象。 假设我这样做, 假设创建一个新的Person对象会将名称设置为“Josh”,并假设Person类具有该名称的get方法。 有没有办法检查名称数组列表中是否包含名为Josh的人。 我唯一能想到的就是这个, 现在,如果Person数组列表和names数组列表包含多个元素,如何检查

  • 本文向大家介绍检查两个StringBuilder对象在C#中是否相等,包括了检查两个StringBuilder对象在C#中是否相等的使用技巧和注意事项,需要的朋友参考一下 要检查两个StringBuilder对象是否相等,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 我有一个Java类,下面是一个示例:

  • 问题内容: 我想检查两个数组是否相等。我的意思是:相同的大小,相同的索引,相同的值。我怎样才能做到这一点? 根据用户的建议,如果数组中的至少一个元素不同,我希望以下内容可以打印 enter ,但实际上没有。 问题答案: $arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs. $arraysA

  • 问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。

  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。