将ArrayList放入HashMap后的Java StackOverflowError

您好,有人可以向我解释为什么这段代码不起作用?

ArrayList<Object> list = new ArrayList<Object>();
list.add(list);

HashMap<Object, Integer> map = new HashMap<Object, Integer>();
map.put(list, 1);

将列表放到映射后,它会抛出StackOverFlowError.

我知道这段代码没有任何意义,我只是想知道它为什么不起作用.

谢谢!

编辑:

堆栈跟踪:

Exception in thread "main" java.lang.StackOverflowError
    at java.util.ArrayList.get(Unknown Source)
    at java.util.AbstractList$Itr.next(Unknown Source)
    at java.util.AbstractList.hashCode(Unknown Source)
    at java.util.AbstractList.hashCode(Unknown Source)
    ...
最佳答案
之所以发生这种情况,是因为您正在尝试计算包含自身的ArrayList的哈希值. ArrayList通过计算它引用的所有对象的哈希值来计算自己的哈希值.当它引用自身时,它会尝试反复计算自己的哈希值,从而导致堆栈溢出.

转载注明原文:将ArrayList放入HashMap后的Java StackOverflowError - 代码日志