在java中使用boolean方法将一个ArrayList与另一个ArrayList进行比较

时间:2012-03-28 22:18:17

标签: java for-loop arraylist boolean

我试图让一个布尔方法返回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

5 个答案:

答案 0 :(得分:1)

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

如果您坚持自己编写,则代码中会出现一个简单的错误。 因为你将test初始化为false,所以“&amp;&amp;!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;
}

答案 1 :(得分:0)

double equals(==)很危险。你实际上是在代码中返回对象,所以你肯定应该使用equals()而不是

答案 2 :(得分:0)

认为你只是迭代一个数组。想想那里可能出现的问题。另请查看您的控制声明。

如果您仔细关注代码的流量,您很快就会意识到为什么是错误的。

答案 3 :(得分:0)

您需要将代码更改为:

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

答案 4 :(得分:0)

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

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