Вероятность ошибки в LinkedHashSet
бесконечно мала . Вы должны отклонить это как правдоподобное объяснение вашей проблемы.
Если предположить, что это ошибка в вашем коде, то это может быть связано с несколькими причинами. Например:
- Ваши методы
equals
и hashCode
возвращают противоречивые ответы для объекта.
- Ваши методы
equals
или hashCode
зависят от изменяемых полей, и эти поля изменяются, пока объект находится в наборе. (Например, если значение хеш-кода изменяется, объект, вероятно, находится в неправильной цепочке хеширования, в результате чего метод remove
не может его найти.)
- Вы объявили метод
equals
как перегрузку, а не переопределение equals(Object)
. (Это может объяснить, почему ваш equals
не вызывается ... при условии, что ваше утверждение действительно верно.)
- Объект, который вы пытаетесь удалить, (на самом деле) не тот, который вы вставили.
- Что-то еще уже удалило объект.
- Вы используете другую версию некоторого класса, которая не соответствует исходному коду, который вы изучали.
Теперь я знаю, что вы отклонили некоторые из этих объяснений. Но это, возможно, было преждевременным. Просмотрите доказательства , на которых вы основали это увольнение.
Другой подход, который вы можете использовать, - это использовать отладчик Java для криминалистической проверки структур данных (например, внутренностей LinkedHashSet
) и пошагового кода, в котором предполагается удаление.