有人可以告诉我,我的导师提供的代码中的以下行是应该做的吗?
if (data.contains(entry))
完整方法:
public String add(Entry entry) {
if (entry == null)
return "Error: null entry";
if (data.contains(entry))
return "Error: this entry already in the book";
boolean done = data.add(entry);
if (done)
return " entry added";
else
return "entry could not be added";
}
我认为它是在ArrayList中检查具有相同详细信息的现有条目,但是当我添加重复条目时它不会进入if
语句,所以我认为我认为错了?我在互联网上搜索过,它说这是为了这个目的所以为什么它对我不起作用?
答案 0 :(得分:7)
请记住contains()
与equals()
执行相等检查。因此,除非您的对象覆盖该方法,否则它将不会认为对象是相等的,除非它们是相同的对象引用。
当然,如果不覆盖equals()
,也不要覆盖hashCode()
。
最后,如果您不想要重复的对象,请考虑使用Set
。
答案 1 :(得分:1)
检查你的equals()和hashcode()
答案 2 :(得分:0)
列表的contains()
方法您将看到它使用equals
()方法来评估两个对象是否相同。
内部逻辑as per docs
(o==null ? e==null : o.equals(e));
所以你必须ovveride
equals
方法compare
他们