【发布时间】:2022-01-16 22:02:38
【问题描述】:
这个想法很简单,我不需要添加已经在列表中的对象。我想问题在于它创建了一个全新的对象,并且找不到与列表中已经存在的其他相同对象的匹配项(我可能完全错了)。
import java.util.Scanner;
import java.util.ArrayList;
public class archive {
private String indentifier;
private String name;
public archive(String indentifier,String name) {
this.name = name;
this.indentifier = indentifier;
}
public String toString() {
return this.indentifier + ": "+this.name;
}
public static void main(String[] args) {
ArrayList<archive> arhivs = new ArrayList<>();
Scanner scan = new Scanner(System.in);
String indentifier, name;
while(true) {
System.out.println("Indentifier? (empty will stop)");
indentifier = scan.nextLine();
if(indentifier.isEmpty()) {
break;
}
System.out.println("Name?(empty will stop)");
name = scan.nextLine();
if(name.isEmpty()) {
break;
}
archive newAr = new archive(indentifier,name);
if(arhivs.contains(newAr)) {
System.out.println("Item is on the list");
}else {
arhivs.add(newAr);
}
}
System.out.println("==Items==");
for(archive arhivi:arhivs) {
System.out.println(arhivi);
}
scan.close();
}
}
【问题讨论】:
-
Java 中的类名应以大写字母开头。
-
嗯,是的,如果您构造一个新的
archive,它将是一个唯一的对象,并且不等于 ArrayList 中的任何内容。您可以改为循环并比较indentifier和/或name值以检查重复项。 -
contains 方法使用 equals() 方法检查对象是否相等。由于您的
archive类不会覆盖equals,因此这不会达到您的预期。 -
所以我必须创建自己的 equals 方法并循环遍历每个对象?
-
@user16731988 不是循环,只需覆盖
equals方法来比较您想要的任何值