【问题标题】:How to compare two arrays element by element in Java?如何在Java中逐个元素地比较两个数组?
【发布时间】:2017-02-22 08:06:35
【问题描述】:

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

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

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

【问题讨论】:

  • 您的第二个循环将使第二个数组从第一个数组索引所在的位置开始遍历其中的所有元素。检查数组 1 上的索引 0 时,数组 2 将从索引 0 到 N 进行检查。当检查数组 1 上的索引 1 时,数组 2 将从索引 1 到 N 进行检查。
  • 为什么要比较所有字段?你知道编译时的所有字段吗?

标签: java arrays object


【解决方案1】:

如果您想更有效地与 O(N) 进行比较,您需要实现您的对象 hash(),并将您的项目添加到一个哈希集中,例如对于 arrayA 的 hasSetA 和对于您的 arrayB 的 hashsetB,然后比较这两个哈希集。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您不必制作 2 个循环,只需一个即可实现:

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

      【讨论】:

        【解决方案4】:

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

        那时你不应该写嵌套循环。一个循环就可以了。

        代码应该是

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

        假设您有相同大小的列表。

        【讨论】:

          【解决方案5】:

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

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

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

          但是:没有 nice 方法可以概括它(例如:编写一个比较这些数组的方法;但例如在不同的字段上)。好吧,您可以使用方法引用,并使用方法引用,最终得到类似

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

          可以这样称呼compareArraysOn(a, b, Whatever::getColor(), SomethinElse::getColor())

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-07-25
            • 1970-01-01
            • 1970-01-01
            • 2011-09-09
            • 1970-01-01
            • 2016-06-19
            • 1970-01-01
            相关资源
            最近更新 更多