【发布时间】:2014-11-20 16:25:52
【问题描述】:
我的问题是我要比较 Java 中的两个数组列表
例如
String prop1 = "String"
String prop2 = "OtherString"
MyObject obj1 = new MyObject(prop1,prop2);
MyObject obj2 = new MyObject(prop1,prop2);
MyObject obj3= new MyObject(prop1,prop2);
ArrayList<MyObject> array1 = new Arraylist<>();
ArrayList<MyObject> array2 = new Arraylist<>();
//array 1 has 3 objects
array1.add(obj1);array1.add(obj2);array1.add(obj3);
//array 2 has 2 objects
array2.add(obj1);array2.add(obj2);
通过比较方法我知道这些数组是不同的
(如果数组具有相同的元素,即使它们的顺序不同,我的方法返回false,如果它们具有相同的元素,则返回true)
所以,该方法将返回 FALSE
我的问题是:
if(!methodToCompareArrays(array1,array2)){
//HOW TO GET THE DIFFERENT objects (IN THIS CASE, obj3 is the different object)
//this is the question :)
}else{
//If there is no difference, well, it doesn't matter too much
请注意,我将在这些数组列表中添加多个对象,并且方法效率也很重要(不是关键,但至少很重要)。我已经看到了答案here 但我不确定哪个更好或更差
提前致谢。
【问题讨论】:
-
methodToCompareArrays至少已经为你做了一些吗? -
在我看来,Symmetric Difference 就是您正在寻找的...看看 Apache Commons CollectionUtil
disjunctionfunction -
它首先比较arraylists的大小,所以在这种情况下它会返回false。我的方法是基于 DiddiZ 的回答 here
-
(array1,array2)的答案应该是什么,与(array2,array1)的答案应该是什么?两个集合中都可以有不同的对象(即,一个对象存在于另一个对象中);在这种情况下,您到底在寻找什么?
-
在这两种情况下,答案都应该是“object3”,并且可能是(存在于一个中的对象不在另一个中),但更有可能是一个数组具有所有objects,另一个数组包含除三个或五个之外的所有对象。