【问题标题】:Comparing one ArrayList to another ArrayList using boolean method in java在java中使用布尔方法将一个ArrayList与另一个ArrayList进行比较
【发布时间】:2012-04-12 13:46:24
【问题描述】:

我试图获得一个布尔方法来返回 true 或 false 是否两个 arrayLists 彼此相等。 arraysListsarrayarray1。用户输入它们。现在这里是我认为可以工作的代码:

public boolean equals(){
//if both are equal return true, else false
boolean test = false;
for(int i = 0; i < array1.size() && !test; i++){
    if(array1.get(i) == (array.get(i))){
        test = true;
    }       
}
return test;
  }

即使所有arrayLists 数字与其他arrayLists 数字匹配,它也会返回false

【问题讨论】:

  • 顺便说一句,试试 array1.equals(array) 看看效果如何!
  • 如果数组中有不同的数字,为什么它应该返回 true?即使索引不同,如果它们具有相同的数字,您是否试图认为这两个 ArrayList 相等?

标签: java for-loop arraylist boolean


【解决方案1】:

您不需要覆盖 equals 方法,因为已经为列表提供了一个完全符合您需要的方法。

如果您坚持自己编写,那么您的代码中有一个简单的错误。 因为您将 test 初始化为 false,所以 "&& !test" 让您的循环一开始就存在。

正确的版本是:

public boolean equals(){
if(array.size()!=array1.size) return false; // test for different length
for(int i = 0; i < array1.size(); i++){
    if(!array1.get(i).equals(array.get(i))){
        return false;
    }       
 }
 return true;
}

【讨论】:

  • 我认为 OP 不应该使用 list.equals(otherList),因为这是一项家庭作业。
  • 这会让老师知道他很聪明并且知道 API :-)
  • 或者它会告诉老师他知道如何使用 Eclipse 的自动完成功能 ;D .
  • 我将它放入我的代码中,将布尔测试初始化​​为真,当数组具有相同数量的数字和相同的特定数字时,它仍然返回假。例如 { 1 } 和 { 1 }
  • 请完全按照此处编写的代码使用,如果仍有问题,请报告。不需要测试变量。
【解决方案2】:

双等号 (==) 很危险。您实际上是在代码中返回对象,因此您绝对应该使用 equals() 代替

【讨论】:

  • == 很危险,但他正在比较数字(如他所说),因此没关系。
  • @Kevin,这不好,因为 ArrayList 中的数字是 Integers,而不是 ints。因此,他必须使用equals()方法,否则将无法正常工作。
【解决方案3】:

认为您只是在迭代一个数组。想想那里可能出了什么问题。还要看看你的控制语句。

如果您仔细跟踪代码的变化,您很快就会意识到为什么是错误的。

【讨论】:

    【解决方案4】:

    您应该“反转”您的方法。首先假设数组相等。如果元素不同,它应该检查每次迭代。如果元素不同,则设置“不等于”标志。在伪代码中

    boolean different = false;
    for (each element of array 1) {
        if (element != element of array 2) different = true
        break;
    }
    

    【讨论】:

      【解决方案5】:

      您需要将代码更改为:

      public boolean equals(){
          if (array1.size() != array.size()) return false;
      
          for(int i = 0; i < array1.size(); i++){
              if(!array1.get(i).equals(array.get(i))){
                  return false;
              }       
          }
      
          return true;
      }
      

      首先,您必须从 test 为 true 开始,如果发现不相等则返回 false,因为这清楚地表明 ArrayList 不相等。你实际上根本不需要test 变量,所以我把它拿出来了。如果您发现不相等的内容,只需返回 false 。如果你没有找到不相等的东西,它永远不会返回 false,最后只会返回 true。其次,您必须使用equals() 方法,因为ArrayLists 使用Integer 类,而不是int 原语所以== 将检查它们是否是同一个对象,而不是它们是否是相同的数字。最后,为了处理不同大小的数组的比较,你应该比较它们的大小,如果它们大小不同,则返回 false,因为它们不可能相等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 2013-05-19
        • 1970-01-01
        相关资源
        最近更新 更多