Java中检查数组是否包含特定值的最有效方法是什么?

5

我有一个Java类中的方法,它使用了类似的逻辑(这不是真实代码,只是为了举例简化过的)。

private Boolean method(Boolean booleanValue, SomeObject object) {
  return booleanValue ? Arrays.asList(object.getStringsArray()).contains("string") : false;
}

一位协作者自己进行PR检查,并给出了以下评论:

这是低效的。它只是为了迭代并检查某个字符串而创建一个新的数据结构。

getStringsArray()方法返回一个String[],那么使用for循环会比Arrays.asList()更好吗?

哪种方法更有效?


1
可怕的方法。第一个参数完全是虚假的。 - nucleon
2
我不同意它是低效的。List对象由数组支持,因此没有性能损失。即使如何执行此操作的规范答案也使用此方法。 - 4castle
2
我们不能确定你的真实代码是好还是坏,因为它可能与此代码截然不同。在这里使用 Boolean 而不是 boolean 是一个坏主意,而且 Object 没有 getStringsArray 方法。 - user2357112
1
这不是真正的代码,更像是伪代码,真正的方法并不像这样,我无法在这里发布原始代码。 - Alfredo Bejarano
@azurefrog 或许是这样,但如果有人搜索这个问题,标题会有点误导。如果页面顶部有一个横幅指向规范答案就好了。不过这并不是什么大问题。我在回答评论中确保它被看到了。 - 4castle
显示剩余3条评论
1个回答

6
当你的同事声称你的方法创建了一个新的数据结构时,是不正确的。
如果你查看Arrays.asList()的API,它说它

返回由指定数组支持的固定大小列表。

当你可以只在其周围包装一个List,并使用其内置方法时,没有必要编写自己的代码来遍历数组。

嘿,谢谢!我很担心因为我想不出另一个解决方案。现在有了API文档,我有证据表明这是最佳方法。 - Alfredo Bejarano
如果您还想从另一个SO问题中获取证明,请参见这个流行的答案。这实际上可能是那个问题的重复... - 4castle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接