gpt4 book ai didi

java - 返回对象的 HashSet.contains()

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:20:53 25 4
gpt4 key购买 nike

假设我正在处理类型 A在集合中。

class A {
ThisType thisField;
ThatType thatField;
String otherField;
}

只有 thisFieldthatField与识别 A 的实例相关-- 所以它是 equals()和它一起hashCode()相应地覆盖方法。有了这个,在 HashSet<A> setOfAs , A 的对象在它们的 ( thisField , thatField ) 值对中是唯一的。

在应用程序的某处,我需要查找 Set对于 A 的实例如果存在,打印它的 otherField -- 元信息。

我可以

i.) 在 setOfAs 上获取一个迭代器, 查看每个条目的 thisFieldthatField值,如果它们都匹配,则打印其 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com