查看ArrayList是否包含Java中对象的最有效方法

我在Java中有一个ArrayList对象。这些对象有四个字段,我将其中两个用于考虑该对象与另一个字段相等。给定这两个字段,我正在寻找最有效的方法,以查看数组是否包含该对象。

棘手的是,这些类是基于XSD对象生成的,因此我无法修改这些类本身以覆盖.equals

有没有比遍历并手动比较每个对象的两个字段然后在发现时中断的方法更好的方法了?寻找一个更好的方法似乎太混乱了。

ArrayList来自未编组到对象中的SOAP响应。

回答:

这取决于您需要的效率。简单地遍历列表以查找满足特定条件的元素是O(n),但ArrayList也是如此。包含是否可以实现Equals方法。如果您不在循环或内部循环中执行此操作,则此方法可能很好。

如果您确实不惜一切代价需要非常高效的查找速度,则需要做两件事:

  1. 解决生成该类的事实:编写一个适配器类,该类可以包装所生成的类,并基于这两个字段(假设它们是公共的)实现equals()。别忘了还要实现hashCode()(*)
  2. 用该适配器包装每个对象,并将其放入HashSet中。 HashSet.contains()具有恒定的访问时间,即O(1)而不是O(n)。

当然,构建此HashSet仍然需要O(n)成本。如果构建HashSet的成本与需要执行的所有contains()检查的总成本相比可以忽略不计,那么您将只会获得任何收益。尝试建立没有重复的列表就是这种情况。


以上是 查看ArrayList是否包含Java中对象的最有效方法 的全部内容, 来源链接: utcz.com/qa/400276.html

回到顶部