1

有人可以告诉我导师提供的代码中的以下行应该做什么吗?

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语句,所以我认为我假设错了?我在互联网上搜索,它说它是为此目的,那么为什么它对我不起作用?

4

3 回答 3

7

请记住,使用contains()执行相等性检查equals()。因此,除非您的对象覆盖该方法,否则除非它们是相同的对象引用,否则它不会认为对象是相等的。

当然,不要在没有覆盖的equals()情况下覆盖hashCode()

最后,如果您不想重复对象,请考虑使用Set.

于 2013-05-03T14:02:05.603 回答
1

检查你的 equals() 和 hashcode()

于 2013-05-03T14:01:38.213 回答
0

List 的contains()方法你会看到它使用equals() 方法来评估两个对象是否相同。

根据文档的内部逻辑

(o==null ? e==null : o.equals(e));

所以你必须对他们ovverideequals方法compare

于 2013-05-03T14:03:14.123 回答