【发布时间】:2011-12-23 03:17:07
【问题描述】:
我想实现一些具有数值鲁棒性的几何算法。
为此,系统范围的delta 用于几何相等。用于点的equals() 是通过使用delta 进行距离计算来实现近似相等的。
我希望能够使用常规的 Java 集合,例如 Set。但是我想不出一个合理的hashCode() 实现。
我的猜测是,高效使用HashSet 的实现会导致空间分区带有“软”边界。与分区边界距离小于delta 的点应该能够同时分类到最多八个(对于 3D)相邻区域中。距离足够近而被认为相等但位于分区不同侧的点将被“错误分类”。
这是我无法理解的。 hashCode() 就像将项目放在桶中,单个项目最终放在一个桶中,而我最多需要将其放入八个。
什么是合理的解决方案?我是否在滥用hashCode() 的目的?仍然使用hashCode() 的最合理的解决方案是什么:)
编辑:谢谢,我有一种直觉,认为这个想法有问题,但无法确定。你把事情说得很清楚了
请让我将我的问题扩展到:如果我对较慢的HashSet 操作(这不是一个炫耀)没问题,我可以让hashCode() 返回1,因为在我的情况下没有正确的实现,如果我实现equals() 放弃传递性要求,会有什么可怕的后果(它是几何计算)?
【问题讨论】:
标签: java hash geometry hashcode equality