Kotlin HashSet неправильное поведение (ошибка) - PullRequest
0 голосов
/ 27 июня 2019

У меня странное поведение класса HashSet.Я не знаю почему, но метод contains возвращает неверный результат.Вот изображение из отладчика:

Debugger rootElemetns - это HashSet, который содержит некоторые FsEntries, которые представлены простым классом данных (без каких-либо дополнительных методов, толькополя).Как видите, fsEntry, переданный методу contains, является тем же элементом, что и подсвеченный элемент (адрес @ 8939 такой же).

Почему contains возвращает false, но indexOf это 5?Это неизвестная ошибка Котлина?Заранее спасибо.

Версия плагина Kotlin: 1.3.40

PS С другими элементами в этом Set Я получил правильный результат.

PPS As Youможно посмотреть, если я конвертирую rootElements с помощью метода toArray(), он также возвращает правильный результат

1 Ответ

0 голосов
/ 28 июня 2019

Благодаря Carcigenicate и я публикую данный ответ как правильный.

"Если это так, то вы, вероятно, нарушаете требования Set. В Java вы не можете изменить ключи HashMap (который поддерживает HashSets). Вероятно, он аналогичен в Kotlin.Когда вы вставляете объект, он хэширует его и помещает в слот в зависимости от хэша. Если вы затем измените объект, хеш изменится, и когда он хеширует объект во время теста членства, хэши будут другими, ипоиск с ошибкой. "

...