如何在Java中逐元素地比较两个数组?

时间:2017-02-22 08:06:35

标签: java arrays object

我在Java中有两个对象数组,其中包含一些我需要比较的字段,但问题是我需要逐个元素地比较,这意味着,我希望比较一个来自我的第一个对象的字段第一个数组包含第二个数组中的第一个对象,第一个数组来自第一个数组,第二个数据来自第二个数组,依此类推。这是我到目前为止所做的,但我的想法是我不知道我的第二个数组应该是什么限制。从我的角度来看,第二个数组应该从第一个数组的索引开始,如下所示:

for(int i = 0; i < resultEntries.size(); i++) {
    for(int j = i; j < resultColorEntries.size(); j++) {
        if(resultEntries.get(i).getColor())...
    };
}

我的问题的另一个解决方案或解决方案将受到欢迎。提前谢谢!

5 个答案:

答案 0 :(得分:2)

如果你想更有效地与O(N)进行比较,你需要实现你的对象hash(),并将你的项添加到一个hashset,例如arrayA的arraySet和arrayB的hashsetB,然后比较这两个hashsets。

答案 1 :(得分:1)

你不必制作2个循环,只能用一个循环来实现:

for(int i = 0; i < resultEntries.size() && i < resultColorEntries.size(); i++) {
    if(resultEntries.get(i).getColor().equals(resultColorEntries.get(i).getColor()) {
         // Same!
    }
}

答案 2 :(得分:0)

  

我希望将第一个数组中第一个对象的字段与第二个数组中的第一个对象进行比较,第二个对象来自第一个数组,第二个对象来自第二个数组,依此类推

然后你不应该编写嵌套循环。一个循环就可以了。

代码应

for(int i=0;i<resultEntries.size();i++){

 if(resultEntries.get(i).getColor().equals(resultColorEntries.get(i).getColor()) )...

假设你有相同的名单大小。

答案 3 :(得分:0)

您可以检查索引是否小于两个数组的大小。

for(int i=0;i<resultEntries.size() && i<resultColorEntries.size();i++){
             if(resultEntries.get(i).getColor()) {
             }
     }

答案 4 :(得分:0)

当两个数组具有相同的维度时,整个事情才有意义;所以你可以去:

Whatever a[] = ...
Somthinelse b[] = ...

check for equal length

for (int i=0; i < a.length; i++) {
  if (a[i].whatever.equals(b[i].whatever))...

要点是:不需要两个循环!

但是:没有很好的概括方法(比如:编写一个比较这些数组的方法;但是在不同的字段上)。好吧,你可以使用方法引用,并使用方法引用,最后得到像

这样的东西
public void compareArraysOn(Whatever[] a, Other[] b, Function<T,U> extractorForA, ...) {

可以像compareArraysOn(a, b, Whatever::getColor(), SomethinElse::getColor())

一样调用