【问题标题】:Java - Directly accessing an object in a list that contains a given valueJava - 直接访问包含给定值的列表中的对象
【发布时间】:2013-06-12 22:19:42
【问题描述】:

我正在寻找一种在 Java 中直接访问包含给定对象的列表中的对象的方法。

我的意思是这样的

List<ObjectA> list = new ArrayList<ObjectA>();
Objectb objb = new ObjectB();
list.add(new ObjectA(objb, new ObjectB()));

ObjectA containsObjB;
boolean gotit= false;
for(ObjectA a: list)
{
    for(ObjectB pObjB: a.getObjBs())
    {
        if(pObjB.equals(objb)
        {
            containsObjB = a;
            gotit = true;
            break;
        }
        if(gotit) break;
    }
}

这将是一个漫长的过程,但由于此操作对时间非常关键,我想知道是否有可能映射列表以便我可以立即访问正确的 ObjectA。

不确定这是否可能,如果没有任何建议如何使其更快/更快,欢迎提出。

问候 塞巴斯蒂安

【问题讨论】:

  • 时间紧迫是一回事;存储的对象数量如何?即,你能负担得起额外的存储空间吗? ObjectA 类的两个对象可以包含 ObjectB 的等效实例吗?如果是,在这种情况下应该发生什么?您如何定义 ObjectB 实例的等价性?
  • 你研究过哈希图吗?如果时间如此紧迫?
  • 你在那里实现了一个二维矩阵...... O(1) 是不可能的

标签: java performance arraylist


【解决方案1】:

好吧,如果您无法使用列表,并且列表尚未排序或未按已知顺序排列,则您必须查看每个项目。

即使您想构建索引/地图,您仍然需要查看每个项目来构建地图......因此,如果它是一次性查找,那么蛮力可能就是要走的路.

如果这种情况很常见,您可以构建某种索引,例如 objb:obja 的 Map,假设每个 B 只在一个 A...

或者您可以更改代码,使其不是列表列表,而是针对查找优化的集合。

【讨论】:

  • 我没有被困在一个列表中,不管我用什么来存储我的对象。到目前为止,我想哈希图听起来不错,我想我会选择这个。谢谢^^
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 2015-06-20
  • 2014-02-17
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多