java 递归测试数组列表是否相等

java recursion test if arraylist are equal

我有一些代码想通过递归提高效率。麻烦是我不知道从哪里开始。该代码比较两个数组列表 a 和 b 以查看它们是否相等。假设两个数组的大小相等。

密码是

public boolean isEqual(A B) {
    boolean answer = false;
    if (lessThanOrEqualTo(B) == true);
    for (int i = 0; i < DList.size(); i++) {
        if (DList.get(i) == B.DList.get(i)) answer = true;
        else answer = false;
    }
    return answer;
}

我目前已经写了

public boolean isEqualRecursion(A B) {
    if DList.size() == 0;
    return false();
} else {

}

我知道停止条件是 0,因为当大小为 0 时什么也没有发生。我不知道接下来要写什么

任何帮助将不胜感激

谢谢

I have some code that I would like to make more efficient by recursion.

你不太可能通过递归来提高效率。它可能 效率较低 ,而且也很脆弱。这是因为标准 Java 编译器不实现尾调用优化。出现这种脆弱性是因为如果输入数组足够大,递归比较算法容易触发堆栈溢出。

但是,如果您想继续 "an exercise",那么我的建议是向 isEqualRecursion 签名添加一个索引参数 ...

这是一道典型的递归题。你可能想尝试这样的事情:

int x = 0;

if(Dlist.get(x) != B.Dlist.get(x)) {
    return false;
} else {
    x+1;
}
if( x!= dList.size()) {
    recursion;
}

return true;

我认为这对您来说是一个很好的开始。这会查看所有元素,假设它们是一个数组,然后检查它们的大小是否相等。

public boolean isEqual(ArrayList<?> a, ArrayList<?> b) {
    if (a.size() != b.size())
        return false;

    for (int i = 0; i < a.size(); i++) {
        if (!isEqual((ArrayList<?>)a.get(i), (ArrayList<?>)b.get(i))) {
            return false;
        }
    }
    return true;
}

现在需要考虑几件事:

  • 这假设 a(和 b) 的内容必须是行 (ArrayList<?>)a.get(i)ArrayList 如果我们的 ArrayList 实际上包含其他内容,比如一个整数?

  • 如果我们的数组列表包含 null 作为一项怎么办?

  • 如果我们传入两个 null ArrayList 会怎样? (甚至只有一个?)

我不确定你函数的重点 lessThanOrEqualTo(B) 是问题的这一部分还是你写错了?

另外什么是DList