Coding style 如果我有两种物理上等价但逻辑上不同的数据类型,那么我应该使用多少散列来存储它们?

Coding style 如果我有两种物理上等价但逻辑上不同的数据类型,那么我应该使用多少散列来存储它们?,coding-style,Coding Style,假设我有两组项目,除了它们在程序中的逻辑用途之外,它们是相似的。为它们分配两个哈希值是更好的编程实践,还是应该只使用一个哈希值?如果项目集相同,哈希值也应该相同 这就像说你可以用扳手拧紧一个螺栓或打开一个窗口,因此它的行为应该像两个不同的对象,这是不对的,因为区分对象的是你的使用方式,而不是对象本身。如果你将它们存储在同一个哈希表中,你就可以运行(可能很小或不存在)有被另一个覆盖的风险。例如,假设您正在存储名字和姓氏(两个字符串)。可以想象,有一个人的名字是“琼斯”,另一个人的姓是“琼斯” 如果

假设我有两组项目,除了它们在程序中的逻辑用途之外,它们是相似的。为它们分配两个哈希值是更好的编程实践,还是应该只使用一个哈希值?

如果项目集相同,哈希值也应该相同


这就像说你可以用扳手拧紧一个螺栓或打开一个窗口,因此它的行为应该像两个不同的对象,这是不对的,因为区分对象的是你的使用方式,而不是对象本身。

如果你将它们存储在同一个哈希表中,你就可以运行(可能很小或不存在)有被另一个覆盖的风险。例如,假设您正在存储名字和姓氏(两个字符串)。可以想象,有一个人的名字是“琼斯”,另一个人的姓是“琼斯”

如果上述方法不可行,那么就没有技术上的原因说明您不能使用单个哈希表。散列到相同值的项将与映射到同一个bucket的具有不同散列值的其他项一起存储在同一个bucket中,但只要在散列冲突后检查实际相等性,就可以了

尽管如此,我仍然希望将逻辑项分离到它们自己的哈希表中,而无需非常充分的理由来组合它们

  • 处理它们的代码可能更容易编写和维护
  • 调试问题会更容易
  • 较小的哈希表可能会减少每个bucket的项,并略微提高性能

相似(列表和集合,两个集合)还是相同(两个字符串列表,一个用户名和另一个密码)?通常我会将不同的逻辑数据分开,但这里的上下文会更有用。那么,相同这个词就是了。