我注意到如果我做了类似的事情:
ArrayList anArray = new ArrayList();
anArray.add(anArray);
Run Code Online (Sandbox Code Playgroud)
Netbeans自动编译器似乎没有任何问题,我似乎仍然能够引用一切.这样做有什么不好的副作用吗?
我怀疑在大多数情况下会发生什么坏事.
如果你以递归方式处理列表,那么问题就出现了,在这种情况下你最终会出现堆栈溢出.
当你打印出来时它会产生一个非常有趣的效果:
package com.sandbox;
import java.util.ArrayList;
public class Sandbox {
public static void main(String[] args) {
ArrayList anArray = new ArrayList();
anArray.add(anArray);
for (Object o : anArray) {
System.out.println(o);
}
}
}
Run Code Online (Sandbox Code Playgroud)
打印出来的:
[(本集合)]
除此之外,我还没有找到打破这样一个程序的方法.我不认为它有任何问题.
正如@wobblycogs所提到的,当你在列表中使用递归时,你必须要小心,但是当你想到它时,这并不是一个特殊情况.它只是一个循环依赖,类似于此代码给出stackoverflow的方式:
package com.sandbox;
public class Sandbox {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.b = b;
b.a = a;
traverse(a);
}
private static void traverse(A a) {
traverse(a.b);
}
private static void traverse(B b) {
traverse(b.a);
}
private static class A {
private B b;
}
private static class B {
private A a;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |