Coding style 如果我有两种物理上等价但逻辑上不同的数据类型,那么我应该使用多少散列来存储它们?
假设我有两组项目,除了它们在程序中的逻辑用途之外,它们是相似的。为它们分配两个哈希值是更好的编程实践,还是应该只使用一个哈希值?如果项目集相同,哈希值也应该相同Coding style 如果我有两种物理上等价但逻辑上不同的数据类型,那么我应该使用多少散列来存储它们?,coding-style,Coding Style,假设我有两组项目,除了它们在程序中的逻辑用途之外,它们是相似的。为它们分配两个哈希值是更好的编程实践,还是应该只使用一个哈希值?如果项目集相同,哈希值也应该相同 这就像说你可以用扳手拧紧一个螺栓或打开一个窗口,因此它的行为应该像两个不同的对象,这是不对的,因为区分对象的是你的使用方式,而不是对象本身。如果你将它们存储在同一个哈希表中,你就可以运行(可能很小或不存在)有被另一个覆盖的风险。例如,假设您正在存储名字和姓氏(两个字符串)。可以想象,有一个人的名字是“琼斯”,另一个人的姓是“琼斯” 如果
这就像说你可以用扳手拧紧一个螺栓或打开一个窗口,因此它的行为应该像两个不同的对象,这是不对的,因为区分对象的是你的使用方式,而不是对象本身。如果你将它们存储在同一个哈希表中,你就可以运行(可能很小或不存在)有被另一个覆盖的风险。例如,假设您正在存储名字和姓氏(两个字符串)。可以想象,有一个人的名字是“琼斯”,另一个人的姓是“琼斯” 如果上述方法不可行,那么就没有技术上的原因说明您不能使用单个哈希表。散列到相同值的项将与映射到同一个bucket的具有不同散列值的其他项一起存储在同一个bucket中,但只要在散列冲突后检查实际相等性,就可以了 尽管如此,我仍然希望将逻辑项分离到它们自己的哈希表中,而无需非常充分的理由来组合它们
- 处理它们的代码可能更容易编写和维护
- 调试问题会更容易
- 较小的哈希表可能会减少每个bucket的项,并略微提高性能