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
?
我有一些代码想通过递归提高效率。麻烦是我不知道从哪里开始。该代码比较两个数组列表 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
?