Родословная с ActiveImport Slow Building Tree

Короткий ответ: Вероятно, это не сработает.

Честный ответ: все зависит.

Более длинный ответ: хеш-код не является проблемой, это характер равные сравнения по плавающей запятой. Как замечает Nalandial и комментаторы на своем посту, в конечном счете любое совпадение с хеш-таблицей все равно заканчивается тем, что используется равным, чтобы выбрать правильное значение.

Итак, вопрос в том, что ваши двойники генерируются таким образом, что вы знаете, что equals действительно означает равные? Если вы читаете или вычисляете значение, храните его в хеш-таблице, а затем позже читаете или вычисляете значение, используя точно такое же вычисление, тогда Double.equals будут работать. Но в противном случае это ненадежно: 1.2 + 2.3 не обязательно равно 3.5, он может равняться 3.4999995 или что-то еще. (Не настоящий пример, я только что сделал это, но это то, что происходит.) Вы можете сравнивать поплавки и удваивать разумно надежно для меньшего или большего, но не для равных.

0
задан Onichan 19 March 2019 в 20:57
поделиться