为什么下面的代码给出 java.lang.StackOverflowError 错误
Set s = new HashSet();
s.add(s);
s.add(s);
操作集在内部执行什么,为什么每次都计算哈希码?
Exception in thread "main" java.lang.StackOverflowError
at java.util.HashMap$KeyIterator.<init>(HashMap.java:1459)
at java.util.HashMap$KeySet.iterator(HashMap.java:916)
at java.util.HashSet.iterator(HashSet.java:172)
at java.util.AbstractSet.hashCode(AbstractSet.java:122)
at java.util.AbstractSet.hashCode(AbstractSet.java:126)
at java.util.AbstractSet.hashCode(AbstractSet.java:126)
at java.util.AbstractSet.hashCode(AbstractSet.java:126)
at java.util.AbstractSet.hashCode(AbstractSet.java:126)
最佳答案
您的 Set 每次都在计算哈希码,因为您使用 HashSet 实现计算该集合内每个对象的哈希值,并使用该哈希值来确保没有重复的元素。而且由于您正在向自身添加一些东西,因此它会在没有结束条件的情况下递归并填满堆栈 -> 堆栈溢出 ;)
关于java.lang.StackOverflowError 添加设置以设置自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49574286/