检查数组是不是包含Java中的值的最有效方法? [复制]

Posted

技术标签:

【中文标题】检查数组是不是包含Java中的值的最有效方法? [复制]【英文标题】:Most efficient way to check if an array contains a value in Java? [duplicate]检查数组是否包含Java中的值的最有效方法? [复制] 【发布时间】:2016-10-19 13:28:42 【问题描述】:

我对 Java 类中的方法有类似的逻辑(不是真正的代码,这是为了示例目的而简化的)。

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

一位指定自己检查 PR 的合作者发表了以下评论:

这是低效的。它正在创建一个新的数据结构,只是为了对其进行迭代并检查是否存在某个字符串。

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

哪种方式更有效?

【问题讨论】:

Arrays.asList 只是返回一个包装器,所以这不是问题。 object.getStringsArray 可能是个问题,这取决于它的作用以及是否有更好的方法来检查这个字符串。 可怕的方法。第一个论点完全是假的。 我不同意它效率低下。 List 对象由数组支持,因此没有性能损失。连the canonical answer for how to do this都用这个方法。 我们无法确定您的真实代码是好是坏,因为它可能看起来与此大不相同。在这里使用Boolean 而不是boolean 是个坏主意,而且Object 没有getStringsArray 方法。 这不是真正的代码,更像是伪代码,真正的方法看起来不是这样的,我无法在此处发布原始代码。 【参考方案1】:

当您的同事断言您的方法正在创建新的数据结构时,他们是不正确的。

如果您查看Arrays.asList() 的 API,就会发现它

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

如果您只需将 List 包裹在数组周围并使用其内置方法,就没有理由编写自己的代码来遍历数组。

【讨论】:

嘿,谢谢!我很担心,因为我想不出另一个解决方案。现在有了 API 文档,我已经证明这是最好的方法。 如果您还想从另一个 SO 问题中获得证据,请参阅 this popular answer。这实际上可能是该问题的重复...

以上是关于检查数组是不是包含Java中的值的最有效方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查数组是不是包含 JavaScript 中的值?

确定变量是不是等于值“列表”中的值的最简洁方法

检查列表是不是包含大于 C# 中的值的项目 [关闭]

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

检查 VB.net 的 DataTable 中是不是存在值的最简单/最快的方法?

Java - 如何检查字符串是不是包含字符串数组的元素?