我正在尝试使用Java HashMap<String, object>
作为对象字典,以便按名称(string
)查找对象。所有的名字都是独一无二的;但是,通常非常相似(例如:“delay1”,“delay2”)。 HashMap.get(string)
是否保证找到具有该名称的唯一项目或者只是查找具有相同哈希值的项目。
代码运行的方式,看起来似乎不一致。
如果HashMap<String, object>
不能满足我的需要,那么Java中的某些内容是否与C#字典类似?
答案 0 :(得分:5)
是的,HashMap
保证找到完全匹配,而不仅仅是具有相同哈希码的匹配。
基于散列的容器通过在查找键上调用equals()
和从其中一个散列桶中调用候选来完成它,以确保存在实际匹配。这就是必须始终覆盖equals
和hashCode
方法的原因,如documentation中所述:
请注意,一旦覆盖此[
hashCode
]方法,通常需要覆盖equals
方法,以便维护hashCode
方法的常规合同,该方法声明等于对象必须具有相同的哈希码。