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

Jag*_*mal 4 java collections hashmap

目前,我创建了一个HashMap,其中Object Id为键,值为1.并且该方法请求Object/Id并检查是否存在匹配的密钥.

这可以吗?或者,是否有更好的替代方案?

ben*_*din 10

这取决于你的意思是"是".

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

如果你的意思是对象相等(即object1.equals(object2)),那么你可以使用HashSet而不是使用HashMap进行编辑.

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

Phill Sacre通过暗示让我想起了什么List.contains().你不具备使用一组或Map实现.您可以使用List(例如ArrayList).您可能会发现包含通过列表执行线性搜索比维护散列结构的成本更低.


小智 7

List.contains(对象),你想要什么?

但请记住,无论你做什么,你都应该总是实现equals()和hashCode().


Fab*_*eeg 5

正如其他人已经注意到的那样,你可以实际使用HashSet或任何类型的Set.如果你使用自己的对象,请确保它们覆盖hashCode()(HashSet所需)和equals()(如果它们都覆盖它们,它们将适用于任何Set).