我们能否找到list的Hashcode
,它包含自身作为元素?
我知道这是一种不良做法,但这是面试官要求的。
[当我尝试运行此代码时,它抛出StackOverflowError
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
现在有两个问题:
StackOverflowError
?检查hashCode
类中AbstractList
方法的实现。
public int hashCode() {
int hashCode = 1;
for (E e : this)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
return hashCode;
}
对于列表中的每个元素,此调用hashCode
。在您的情况下,列表本身就是唯一的元素。现在,此呼叫永无止境。该方法递归调用自身,直到遇到stackoverflow错误。