目前,我创建了一个以 Object Id 作为键和 1 作为值的 HashMap。该方法要求提供 Object/Id 并检查是否有匹配的键。

那样可以么?或者,是否有更好的选择?

最佳答案

这取决于你所说的"is"是什么意思。

如果您的意思是对象标识(即 object1 == object2 ),那么您可以按照您描述的方式使用 IdentityHashMap

如果您的意思是对象相等(即 object1.equals(object2) ),那么您可以只使用 HashSet 而不是使用 HashMap 四处游荡。

如果您的对象使用从 Object 继承的 equals() hashCode() 的默认实现,那么这是一个没有区别的区别:默认值将对象相等性实现为对象标识。

Phill Sacre 通过建议 List.contains() 提醒了我一些事情。您不必使用 Set 或 Map 实现。您可以使用列表(例如 ArrayList )。您可能会发现,包含通过短列表执行线性搜索比维护散列结构的成本更低。

10-07 19:11
查看更多