Если ваш набор является TreeSet
или каким-либо другим набором, в котором вы используете собственный компаратор, то вы можете увидеть это, если компаратор был сломан, либо не вернув правильный отсортированный порядок, либо имея объекты, которые на самом делеравное сравнение неравноеКогда набор внутренне ищет элемент и использует компаратор, он сделает неправильный выбор и не увидит элемент.
Если ваш набор равен HashSet
, ваша хеш-функция может быть нарушена и вызвать два объекта.которые равны, чтобы иметь другой хэш-код.Внутренне, так как HashSet
использует хеш-код объекта, чтобы выяснить, где искать, он может в конечном итоге искать неправильный сегмент.
В качестве альтернативы, если вы сохраняете объекты в Set
любого вида, а затемизмените их, в итоге вы можете нарушить некоторый внутренний инвариант Set
.Например, если вы сохраните что-то в HashSet
, а затем измените его значение, оно будет в неправильном сегменте, а если у вас есть TreeSet
и вы измените значение, оно может появиться в неправильном месте в отсортированном порядке.
Если вы одновременно изменяете набор, возможно, вы добавили элемент в другой поток, но не имели никаких гарантий того, что операция, которая внесла это изменение, будет видна в другом потоке.Второй поток не будет видеть элемент, даже если он будет добавлен.