检查数组是不是包含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中的值的最有效方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中查看 ArrayList 是不是包含对象的最有效方法