我们可以发现hashcode
的list
是本身含有的element
?
我知道这是一个坏习惯,但这就是面试官的要求。
当我运行以下代码时,它抛出StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
现在,我有两个问题:
- 为什么会有一个
StackOverflowError
? - 是否可以通过这种方式找到哈希码?
List
接口的定义,这是不可能的,hashCode
列表的取决于其成员。鉴于列表是其自己的成员,因此其哈希码取决于其hashCode
,取决于其hashCode
...等等,从而导致无限递归,StackOverflowError
您将遇到此问题。现在的问题是:为什么您需要一个列表来包含自身?我可以向您保证,您可以以更好的方式实现您想做的所有事情,而无需像这样的递归成员身份。