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

rootElemetns — это HashSet, который содержит некоторые FsEntries, представленные простым классом данных (без каких-либо дополнительных методов, только поля). Как Вы можете видеть fsEntry, переданный в метод contains, это тот же элемент, что и выделенный элемент (адрес @8939 тот же).
Почему contains возвращает false, но indexOf равно 5? Это неизвестная ошибка Kotlin? Заранее спасибо.
Версия плагина Kotlin: 1.3.40
P.S. С другими элементами в этом Set у меня правильный результат.
П.П.С. Как видите, если я конвертирую rootElements с помощью метода toArray(), он также возвращает правильный результат.
Можете ли вы создать минимальный воспроизводимый пример?
@Carcigenicate Хм, может там одно поле изменилось. Я проверю это завтра. Спасибо за идею.
Если это так, то вы, вероятно, нарушаете требования набора. В Java вы не можете изменить ключи HashMap (которые поддерживаются HashSets). Вероятно, это похоже на Котлин. Когда вы вставляете объект, он хэширует его и помещает в слот в зависимости от хэша. Если вы затем измените объект, хэш изменится, и когда он хэширует объект во время проверки принадлежности, хэши будут другими, и поиск завершится ошибкой.
Если вам нужно, чтобы вставленные объекты были изменяемыми, рассмотрите возможность использования HashMap вместо этого, связывая объект с некоторым ключом идентификатора и вместо этого выполняя поиск по идентификатору. Это нормально, если значения меняются.
Спасибо Carcigenicate, и я публикую данный ответ как правильный.
«Если это так, то вы, вероятно, нарушаете требования Set. В Java вы не можете изменить ключи HashMap (которыми поддерживаются HashSets). Скорее всего, это похоже на Kotlin. Когда вы вставляете объект, он хэширует его и помещает в слот в зависимости от хэша. Если вы затем измените объект, хеш изменится, и когда он хеширует объект во время проверки принадлежности, хэши будут другими, и поиск завершится ошибкой».
Изменяете ли вы объект после того, как вставили его в набор? Вы, вероятно, возитесь с хешем, который он сохранил.