gpt4 book ai didi

java - 检查数组列表中的两个对象是否相等

转载 作者:行者123 更新时间:2023-11-30 08:08:37 25 4
gpt4 key购买 nike

我有一个创建元素类型数组列表的主类:

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
}

}

}

然后我有一个元素类:

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 和名称。他们是这样做的方法吗?理想情况下,我只想添加一个元素,如果它不存在的话。

最佳答案

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

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 方法,那么将比较 2 个对象的内存位置,因为它是不同的 ArrayList.contains 将返回 false ,因此通过覆盖 equals 方法,我们建立了一个逻辑条件,确定何时将 2 个 Element 对象视为相同。

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;
}

关于java - 检查数组列表中的两个对象是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33059009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com