gam*_* on 1 java string equals hashcode
所以我正在做一些关于比较字符串最快的研究,并发现这段代码:
if (s1.hashCode() == s2.hashCode() && s1.equals(s2))
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么它更快?因为我认为它需要更多的计算机周期,而不仅仅是说没有&&.
Jon*_*eet 16
Java字符串缓存其哈希码 - 因此,如果哈希码相等,则字符串很可能相等.如果字符串长度相同并且仅在最末端附近不同,则完全相等性检查可能需要更长时间.(equals在String查看实际代码单元之前,首先检查长度的实现.)
另一方面,这需要计算哈希码 - 如果尚未计算,则在字符串的长度中将是O(n),而可以非常快速地比较两个不等长度的字符串.
因此,如果您知道字符串已经被哈希并且您期望有大量具有相同长度1的字符串,那么这是一个优化 - 否则它可能会使事情变慢.我不会在通用代码中使用它 - 我也会添加一个注释来解释它的原因.
1 而且你还不知道的哈希码是通过一些其他的机制相同,按以下supercat的评论-我会说这是在一个角落里时的极端情况,虽然.
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |