【问题标题】:java recursion test if arraylist are equaljava递归测试arraylist是否相等
【发布时间】:2015-05-29 13:39:23
【问题描述】:

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

任何帮助将不胜感激

谢谢

【问题讨论】:

  • “我有一些代码想通过递归提高效率。” 递归可能不是比较两个列表是否相等的有效方法。是锻炼吗?
  • arraylist1.equals(arraylist2) 怎么样?
  • 使用==检查对象的相等性是不好的使用equals
  • 这对我来说就像一个家庭作业......
  • @StevenVanImpe 其实是我忘记抄下来的例子

标签: java recursion arraylist boolean compare


【解决方案1】:

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

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

但是,如果您想将此作为“练习”继续进行,那么我的提示是在isEqualRecursion 签名中添加一个索引参数...

【讨论】:

    【解决方案2】:

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

    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 在行 (ArrayList&lt;?&gt;)a.get(i) 如果我们的 ArrayList 实际上包含其他内容,如整数?

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

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

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

    还有什么是DList

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-10-12
        • 2017-04-24
        • 2020-02-16
        • 2016-10-26
        • 2017-06-26
        • 2013-07-15
        • 2011-11-22
        • 2017-03-16
        相关资源
        最近更新 更多