hashmap是什么 - java hashmap用法



检查一个对象是否来自另一个对象(比如固定的)对象列表的最好方法是什么? (5)

“是从另一个列表”的定义是什么? 这是对象平等吗? 那么你有什么好,但你可以考虑(哈希)集更清晰。

如果它是引用相等,则需要查找IdentityHashMap ,或者使用IdentityHashcodeHashSet

https://src-bin.com

目前,我创建一个HashMap与对象Id作为键和1作为价值。 该方法要求对象/ ID,并检查是否有一个匹配的关键。

这可以吗? 或者,有更好的选择吗?



Answer #2

没关系。 或者你可以使用HashSet

编辑:

你可以用两种方法比较对象:

  1. 引用
  2. 习惯

默认Object比较是通过引用完成的,并且在Object类上实现。

如果对象的层次结构中的任何类都会覆盖此默认实现,那么您将执行自定义比较。 如果发生这种情况,还必须覆盖hashcode

鉴于此, 如果你想通过引用来比较对象,但是有一个相等的自定义实现,那么你应该使用一个IdentityHashMap ELSE使用一个HashSet

如果你想用HashMap维护当前的实现,那也没关系。 HashSet在内部是用一个HashMap实现的。 但是,不要将该值设置为1,而应将其设置为null

还有正确的数据结构的问题。 你可以使用List而不是Hash结构。 您应该使用的数据结构的类型取决于您。 这取决于许多人的想法,比如你打算在集合中放置多少个对象,有多少个访问,插入等等。


Answer #3

由于布鲁诺建议你可以使用一个固定的对象列表,然后调用contains()

如果你使用HashSet ,确保你覆盖了你的对象的hashCode()实现,在这种情况下,这个实现在底层用于身份检查。

(上一次我钻入JRE,使用HashMap方法正是HashSet所做的!)


Answer #4

这取决于你的意思是“是”。

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

如果你的意思是对象相等(即object1.equals(object2) ),那么你可以使用HashSet,而不是一个哈希映射周围。

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

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





hashmap