我们可以发现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您将遇到此问题。现在的问题是:为什么您需要一个列表来包含自身?我可以向您保证,您可以以更好的方式实现您想做的所有事情,而无需像这样的递归成员身份。