【发布时间】:2012-07-19 00:33:30
【问题描述】:
我有以下字符串作为键。从下面的代码中,我看到所有的键都指向同一个减速器,尽管有很多减速器。最后,同一个减速器超载。我想,每个键(字符串),去一个不同的减速器。请帮我解决这个问题。谢谢!
String a = "71 1 2";
String b = "72 1 1";
String c = "70 1 3";
int hash_a = a.hashCode();
int hash_b = b.hashCode();
int hash_c = c.hashCode();
int part_a = hash_a % 10;
int part_b = hash_b % 10;
int part_c = hash_c % 10;
System.out.println("hash a: "+hash_a+" part_a: "+part_a);
System.out.println("hash b: "+hash_b+" part_b: "+part_b);
System.out.println("hash c: "+hash_c+" part_c: "+part_c);
Output:
hash a: 1620857277 part_a: 7
hash b: 1621780797 part_b: 7
hash c: 1619933757 part_c: 7
【问题讨论】:
-
使用
new Text("71 1 2").hashCode()是否会给您带来更好的结果(抱歉,懒得启动 IDE 并检查)。Text.hashCode()使用WritableComparator.hashBytes(byte[])的方法,或许能给你更好的答案 -
忽略我的最后一个,看起来 WritableComparator 和 String hashCode 方法是可比的。
-
嗨,克里斯!谢谢回复。我认为如果它们具有可比性,我们可以将其用于排序,但它们仍然达到相同的减少。我对么?比如说,排序“71 1 2”,然后是“71 1 3”,等等。但是如果分区器返回的分区号相同(使用模数),那么它们仍然到达同一个减速器。我对么?如果是这样,它是如何解决问题的?
-
如果它们都产生相同的模数,那么是的,它不会有帮助。我想你需要调查@seedhead 的答案