我的问题是我要比较Java中的两个arraylists
e.g
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
请注意,我将在这些arraylists中拥有多个对象,并且方法效率也很重要(至关重要,但至少重要)。我已经看到了答案here但我不确定哪一个会更好或更差
提前致谢。
答案 0 :(得分:1)
如果这些列表中的对象对您不重要,您可以执行以下操作:
array1.removeAll(数组2);
这将从array1中删除array2中存在的所有元素。
所以如果array1 = [obj1,obj2,obj3]和 array2 = [obj1,obj2]
removeAll:
之后array1 = [obj3]和 array2 = [obj1,obj2]
如果您无法从任一列表中删除对象,请创建一个临时列表并从中删除以获取额外的对象。
答案 1 :(得分:1)
你应该使用java的set interfaces来实现这个目标。
现在,有一点重要的是在equals
上使用一个好的MyObject
方法来比较两个MyObjects
是否相同。
然后你可以使用上面的文档链接来检查两组的交集。如果两个集合中的项目与一个集合中的项目数量相同,则它们是相同的集合(无论顺序如何)。
HashSet<MyObject> set1 = new HashSet<MyObject>(array1);
HashSet<MyObject> set2 = new HashSet<MyObject>(array2);
Set<MyObject> intersection = new HashSet<MyObject>(set1);
intersection.retainAll(set2);
if(intersection.size() == set2.size()) {
// They're the same.
} else {
HashSet<MyObject> itemsOnlyInSet1 = intersection;
HashSet<MyObject> itemsOnlyInSet2 = set2.retainAll(set1);
}
答案 2 :(得分:-2)
我不确定我的理解是什么,但如果您要对对象列表进行比较和排序,最好的选择是从Collections API中查找TreeMaps。试试这个: