假设我正在处理类型 A
在集合中。
class A {
ThisType thisField;
ThatType thatField;
String otherField;
}
只有 thisField
和 thatField
与识别 A
的实例相关-- 所以它是 equals()
和它一起hashCode()
相应地覆盖方法。
有了这个,在 HashSet<A> setOfAs
, A
的对象在它们的 ( thisField
, thatField
) 值对中是唯一的。
在应用程序的某处,我需要查找 Set
对于 A
的实例如果存在,打印它的 otherField
-- 元信息。
我可以
i.) 在 setOfAs
上获取一个迭代器, 查看每个条目的 thisField
和 thatField
值,如果它们都匹配,则打印其 otherField
ii.) 使用自映射,HashMap<A,A> selfMapA
,其中键和值是每个条目中的相同对象。实例化 A
使用 ( thisField
, thatField
) 值对查找 selfMapA
并按原样获取其匹配条目(如果存在)。
(i) 是 O(n)
-- 虽然它在恒定时间内找到了对象,但它并没有在恒定时间内获得对象。
(ii) 在恒定时间内获取对象,这是我们在系统中不断使用的对象。但是,它使用了两倍的内存。
我正在寻找的是一个集合结构,它获取在恒定时间内找到的对象条目。例如,一个
contains(Object)
返回 Object
的方法,它找到的对象(如果存在),而不是 boolean
作为HashSet.contains()
有更好的替代品吗?有办法解决这个问题吗?
最佳答案
HashSet 是使用 HashMap 实现的,所有值都设置为虚拟对象,因此选项 2 实际上应该使用比 HashSet 稍微少的内存。我会选择选项 2。
关于java - 返回对象的 HashSet.contains(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29403810/