Java String具有代码保留顺序和基于散列的分区

时间:2016-05-18 21:41:17

标签: java hadoop partitioning

基于来自java api doc的以下函数,它确实似乎保留了顺序。 s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 我还测试了一些示例,其中hascode与实际字符串的顺序相似。但只是想与其他人核实,以防我在这里遗漏了什么。

我随后的问题是关于是否在使用hadoop或spark的大数据应用程序中使用HashPartitioner或OrderPreservingPartitioner。如果你的密钥只是一个Java String,那么HashPartitioner也应该保留顺序,对吗?

1 个答案:

答案 0 :(得分:2)

你的前提是错误的:它不会保留秩序。 "Aa" hashCode 2112BA hashCode 2111"Aa"出现在"BA"之前,但其hashCode更大。

(另外,在溢出int之前它不需要很长的字符串,数字开始环绕,这也违反了你的假设。)

所以不,这些都没有保留秩序。