基于来自java api doc的以下函数,它确实似乎保留了顺序。
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
我还测试了一些示例,其中hascode与实际字符串的顺序相似。但只是想与其他人核实,以防我在这里遗漏了什么。
我随后的问题是关于是否在使用hadoop或spark的大数据应用程序中使用HashPartitioner或OrderPreservingPartitioner。如果你的密钥只是一个Java String,那么HashPartitioner也应该保留顺序,对吗?
答案 0 :(得分:2)
你的前提是错误的:它不会保留秩序。
"Aa"
hashCode
2112
,BA
hashCode
2111
。 "Aa"
出现在"BA"
之前,但其hashCode
更大。
(另外,在溢出int之前它不需要很长的字符串,数字开始环绕,这也违反了你的假设。)
所以不,这些都没有保留秩序。