Kotlin HashSet错误行为(错误)

时间:2019-06-26 22:16:41

标签: android kotlin set hashset

我有一个HashSet类的奇怪行为。我不知道为什么,但是方法contains返回错误的结果。这里是调试器的图像:

Debugger rootElemetns是一个HashSet,其中包含一些FsEntries,它们由一个简单的数据类表示(没有任何附加方法,只有字段)。如您所见,传递给方法fsEntry的{​​{1}}是与高亮元素相同的元素(地址@ 8939是相同的)。

为什么contains返回contains,但是false是5?这是未知的Kotlin错误吗?预先感谢。

Kotlin插件的版本:1.3.40

P.S与indexOf中的其他元素一起,我得到了正确的结果。

P.P.S。如您所见,如果我通过Set方法转换了rootElements,它也会返回正确的结果

1 个答案:

答案 0 :(得分:0)

感谢致癌物质,我将给出的答案正确无误。

“如果是这种情况,则可能违反了Set的要求。在Java中,您无法更改HashMap的键(支持HashSet的键)。在Kotlin中可能类似。插入时对象,它会对其进行哈希处理,然后根据哈希将其放入插槽中。如果您随后更改该对象,则哈希将发生变化,并且在成员资格测试期间对对象进行哈希处理时,哈希将有所不同,并且使用失败。”