我在Java中有一个ArrayList对象。这些对象有四个字段,我将其中两个用于考虑该对象与另一个字段相等。给定这两个字段,我正在寻找最有效的方法,以查看数组是否包含该对象。
棘手的是,这些类是基于XSD对象生成的,因此我无法修改这些类本身以覆盖.equals。
.equals
有没有比遍历并手动比较每个对象的两个字段然后在发现时中断的方法更好的方法了?寻找一个更好的方法似乎太混乱了。
编辑: ArrayList来自未编组到对象中的SOAP响应。
这取决于您需要的效率。简单地遍历列表以查找满足特定条件的元素是O(n),但ArrayList也是如此。包含是否可以实现Equals方法。如果您不在循环或内部循环中执行此操作,则此方法可能很好。
如果您确实不惜一切代价需要非常高效的查找速度,则需要做两件事:
当然,构建此HashSet仍然需要O(n)成本。如果构建HashSet的成本与需要执行的所有contains()检查的总成本相比可以忽略不计,那么您将只会获得任何收益。尝试建立没有重复的列表就是这种情况。