【发布时间】:2017-05-05 12:07:56
【问题描述】:
我正在尝试在两个不同位置之间同步用户,因此我将现有用户保留在一个列表中,因此以设定的时间间隔进行比较,以查看是否应该添加(新)用户或仅更新用户。
我有一个类 User,它是 Principal 的子类。
但是我在列表中的比较不起作用;我用谷歌搜索了一下,发现你必须重写 equals 方法,我这样做了 - 但该代码似乎没有被执行,它进入 ArrayList.class (原始)并在那里执行 contains 方法。
这是因为我的类已经扩展了超类 Principal 吗? 如果我想执行我在 User 类中定义的 equals,我有什么选择?
public class User extends Principal
{
// some protected properties
...
@Override
public boolean equals(Object obj) {
return (this.getAlias().equals(((User) obj).getAlias())
&& this.getEmailAddress().equals(((User) obj).getEmailAddress()) && this.getCellNumber().equals(((User) obj).getCellNumber()));
}
}
Principal 类没有重写equals方法,更重要的是,我检查相等性的属性,只包含在子类--User中。因此,在这里检查它是有意义的。
简而言之,我有一个用户数组列表,我想检查某个用户是否已经存在。我在列表上调用 compare ,但它总是失败,表明方法 equals 没有在我的代码中正确覆盖。 有什么建议吗?
【问题讨论】:
-
你做的很好。
-
我假设您的
ArrayList包含Principal对象? -
请在列表中实际比较的地方添加代码。
-
1.听起来这应该是线程安全的。 2. 出于性能原因,使用更好的数据结构来保存用户可能会更好,以便更快地检索和更新。例如地图。您只需要为您的用户创建一个密钥,痛苦就会消失。或者更好的是并发的 -
ConcurrentHashMap。 -
ArrayList 的类型是 User,而不是 Principal。
标签: java arraylist compare overriding equals