gpt4 book ai didi

java.lang.StackOverflowError 添加设置以设置自身

转载 作者:行者123 更新时间:2023-12-02 00:35:55 25 4
gpt4 key购买 nike

为什么下面的代码给出 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com