【发布时间】:2013-04-18 22:22:50
【问题描述】:
我有两个列表 **ListA<MyData> listA = new ArrayList<MyData>()** 和 ListB<MyData> listB = new ArrayList<MyData>() 都包含 MyData 类型的对象,而 MyData 包含这些变量。
MyData {
String name;
boolean check;
}
ListA 和 ListB 都包含 MyData 对象,现在我必须在此处比较列表的对象值 name 以及 check 变量,例如 if ListA 包含这些对象值
ListA = ["Ram",true],["Hariom",true],["Shiv",true];
和 ListB 也包含
ListB = ["Ram",true],["Hariom",true],["Shiv",true];
然后我必须比较列表并返回 false,因为两个列表相同 但如果 ListA 包含
ListA = ["Ram",true],["Hariom",true],["Shiv",false];
和ListB包含
ListB = ["Ram",true],["Hariom",true],["Shiv",true];
然后我必须比较列表并返回 true,因为两个列表不同
或反之亦然,因此任何列表值的任何细微变化都必须返回 true。 我必须在这里提到的一件事,对象可以按任何顺序排列。
【问题讨论】:
-
我无法区分上述任何一个列表。
-
对象值改变一个对象包含真另一个假
-
@askkuber 你是否关心这两个列表的顺序,例如应该迭代它们总是给出相同的结果吗?如果没有,只需使用
Set<MyData>,例如HashSet, implementequals()andhashCode()在MyData上,只需将两组与setA.equals(setB)进行比较。 -
@Philipp 列表包含任何顺序的对象,我必须比较它们并在发现任何单个更改时返回 true
-
我建议通过一个好的
hashCode()实现对它们进行排序,然后比较成对的元素,看看它们是否相等。