当前位置: 首页 > 知识库问答 >
问题:

处理两个ArrayList之间的差异

韩华美
2023-03-14

我的问题是,我要比较Java中的两个ArrayList

例如

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

请注意,我将在这些ArrayList中包含多个对象,而且方法效率也很重要(不是很重要,但至少很重要)。我在这里看到了答案,但我不确定哪一个更好或最坏

提前谢谢。

共有3个答案

施慈
2023-03-14

我不确定我是否理解您的问题,但如果您试图比较和排序对象列表,最好的选择是从Collections API中查找树图。尝试以下操作:

HashMap、LinkedHashMap和TreeMap的区别

曾成天
2023-03-14

如果这些列表中的对象对您不重要,可以执行以下操作:

阵列1。移除所有(阵列2);

这将从array1中删除array2中存在的所有元素。

所以如果array1=[oby1, oby2, oby3]和array2=[oby1, oby2]

移除所有后:

array1=[Obj3]和array2=[Obj1, Obj2]

如果您无法从任何一个列表中删除对象,请创建一个临时列表并从中删除以获得额外的对象。

轩辕佑运
2023-03-14

您可能应该为此使用java的set接口。

现在,重要的一件事是在MyObject上有一个好的方法,可以比较两个MyObject是否相同。

然后您可以使用上面的留档链接来检查两个集合的交集。如果两个集合中的项目数量与一个集合中的项目数量相同,那么它们是相同的集合(无论顺序如何)。

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);
} 
 类似资料:
  • 问题内容: 我有以下两个数组。我想要这两个数组之间的区别。也就是说,如何找到两个数组都不存在的值? 问题答案: 注意: 这个答案将返回的值是不存在的,它不会返回值不在。

  • 我错过了什么?

  • 问题内容: 如何以格式计算两个日期之间的差并以秒或毫秒为单位获取结果? 问题答案: 因此,您可以为您的目的使用。

  • 问题内容: 功能: 我的要求是找出几年中两个日期之间的差异。所以,我写了上面的函数。在此,如果d1为NULL,则将其分配为当前日期。但是,它会产生如下所示的错误。 有没有人能帮助我解决这个问题。 问题答案: 尝试 : 函数以以下格式返回两个日期之间的年,月和天数: 从此输出中使用,以选择唯一的年份差异。也没有必要把if语句来处理,因为我已经添加返回第一值,所以,如果是它返回 功能结构: 函数调用:

  • 我正在尝试编写一个方法来打印两个ZonedDateTimes之间的时间差,关于时区之间的差异。 我找到了一些解决方案,但它们都是为使用LocalDateTime而编写的。

  • 我正在设置闹钟的日历日期。闹钟时间设置了小时、分钟、格式和日期。我还想抓住现在的时间,比较两者之间的差异。所以,如果闹钟时间设置为周三,现在时间是周四,我想知道周四到周三之间有多少天。我还需要时间和分钟。 我尝试过每一个例子,但似乎都不管用。 JAVA方法 我确实尝试过这个。 这只是不太正确。它说是2天,所以我假设它是从闹钟日(星期二)到星期四(今天)。我需要的是从今天(星期四)到星期二。从现在起