我正在做一个小程序,将书架放在书架清单中。如果之前已经输入了架子编号,则无法再次输入。但是,它不起作用。
这是我在主类中的代码:
Shelf s = new Shelf(1);
Shelf s2 = new Shelf(1);
Library l = new Library();
l.Addshelf(s);
l.Addshelf(s2);
如您所见,我在两个对象中都输入了1作为架子编号,因此下面的代码应从库类中运行
public void Addshelf(Shelf s)
{
List li = new ArrayList();
if(li.contains(s))
{
System.out.println("already exists");
} else {
li.add(s);
}
}
问题必须在上述方法中。我想知道如何检查列表中是否已经存在该架子编号,在这种情况下,它应该使用上面的语句提示我-“已经存在。
最佳答案
您必须重写equals
中的Shelf
方法以获得所需的行为。
在不覆盖equals
的情况下,调用ArrayList::contains
的ArrayList::indexOf
将使用Object::equals
的默认实现,该实现比较对象引用。
@Override
public boolean equals (Object anObject)
{
if (this == anObject)
return true;
if (anObject instanceof Shelf) {
Shelf anotherShelf = (Shelf) anObject;
return this.getShelfNumber() == anotherShelf.getShelfNumber(); // assuming this
// is a primitive
// (if not, use equals)
}
return false;
}