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



我有一些代码,我想通过递归提高效率。问题是我不知道从哪里开始。代码比较两个数组列表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,因为当size为0时什么也没有发生。我不知道接下来该写什么

任何帮助都将不胜感激

谢谢

我有一些代码,我想通过递归来提高效率。

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

但是,如果您想继续将此作为"练习",那么我的提示是向isEqualRecursion签名添加索引参数…

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

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作为一个项目呢?

  • 如果我们传递两个空ArrayList s呢?(甚至只有一个?)

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

什么是DList ?

这是一个典型的递归问题。您可能想尝试这样做:

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

最新更新