我有一个对象列表,例如Article
,这是一个非常复杂的嵌套对象。我将忽略实际的课程,因为这并不重要。重要的是要知道Article
已实现equals()
(使用AutoValue)。
我有两个列表:
List<Article> list1 = getSomeArticles();
List<Article> list2 = getOtherArticles();
现在,我检查它们是否相等:
boolean listsAreEqual = list1.equals(list2);
这将返回false
。
但是我检查是否。两个列表的大小和b相同。索引i
中的每个项目在两个列表中均相等:
if (list1.size() != list2.size()) {
return;
}
for (int i = 0; i < list1.size(); i++) {
Article article1 = list1.get(i);
Article article2 = list2.get(i);
if (!article1.equals(article2)) {
return;
}
}
// All items in the two lists are equals, but list2.equals(list2) is false
两个列表似乎都包含完全相同的项目,但是list1.equals(list2)返回false
。
那怎么可能?
答案 0 :(得分:1)
它们应该相等。您的代码不正确。来自documentation:
将指定的对象与此列表进行比较以确保相等。退货 当且仅当指定对象也是列表时,才返回true 具有相同的大小,并且两个中的所有对应元素对 名单是平等的。 (两个元素e1和e2相等,如果(e1 == null? e2 == null:e1.equals(e2))。换句话说,两个列表被定义为 如果它们包含相同顺序的相同元素,则相等。这个 定义可确保equals方法可跨 List接口的不同实现。
当然,除非List
实现会覆盖java.util.List
中的默认设置。