Java String hascode保留顺序和基于哈希的分区
Java String hascode preserving order and Hash based partitioning
基于 java api 文档中的以下函数,它似乎确实保留了顺序。
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
我还测试了一些 hascode 与实际字符串顺序相似的示例。但只是想和其他人核实一下,以防我在这里遗漏了什么。
我接下来的问题是关于在使用hadoop或spark的大数据应用程序中是否使用HashPartitioner或OrderPreservingPartitioner。如果您的密钥只是一个 Java 字符串,那么 HashPartitioner 也应该保留顺序,对吧?
你的前提是错误的:它不保持秩序。
"Aa"
的 hashCode
为 2112
,BA
的 hashCode
为 2111
。 "Aa"
在 "BA"
之前,但它的 hashCode
更大。
(此外,不需要很长的字符串就会溢出整数并且数字开始回绕,这也违反了您的假设。)
所以不,none 这些保留顺序。
基于 java api 文档中的以下函数,它似乎确实保留了顺序。
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
我还测试了一些 hascode 与实际字符串顺序相似的示例。但只是想和其他人核实一下,以防我在这里遗漏了什么。
我接下来的问题是关于在使用hadoop或spark的大数据应用程序中是否使用HashPartitioner或OrderPreservingPartitioner。如果您的密钥只是一个 Java 字符串,那么 HashPartitioner 也应该保留顺序,对吧?
你的前提是错误的:它不保持秩序。
"Aa"
的 hashCode
为 2112
,BA
的 hashCode
为 2111
。 "Aa"
在 "BA"
之前,但它的 hashCode
更大。
(此外,不需要很长的字符串就会溢出整数并且数字开始回绕,这也违反了您的假设。)
所以不,none 这些保留顺序。