Java负数中的哈希编码

Java负数中的哈希编码,java,hash,hashtable,hashcode,negative-number,Java,Hash,Hashtable,Hashcode,Negative Number,因此,该代码生成哈希代码: int x = 33; int hash = 7; for (String str: list) { for (int o = 0; o < str.length(); o++) { hash = ((33*hash) + str.charAt(o)); } 有人有什么想法吗?如果你不想让它们成为负面的,只需添加 hash = Math.abs(hash) 这将给出一个非负数。 但要注意,你有点松懈;) 获取结果的绝对值。@

因此,该代码生成哈希代码:

int x = 33;
int hash = 7;
for (String str: list) {

    for (int o = 0; o < str.length(); o++) {
        hash = ((33*hash) + str.charAt(o));
    }

有人有什么想法吗?

如果你不想让它们成为负面的,只需添加

hash = Math.abs(hash)
这将给出一个非负数。
但要注意,你有点松懈;)

获取结果的绝对值。@Sotirios Delimanolis你是什么意思?怎么做?你什么意思怎么做?如何获得绝对值?我会让你弄明白的。你应该使用
biginger
;或者,如果性能是您关心的问题,并且您处理的是大量数据,那么看看“过载”是什么意思?现在看起来更复杂了,为什么会这样?如果是这样,另一个问题是:为什么33?33是一个素数,是霍纳多项式方法的一个集值。这样做是因为我们已经被告知这样做了,不管怎样,我的建议是:使用尽可能最好的散列(还有其他散列),如果你不希望它们是负数,就让它们成为非负数。失去一点分辨率-一半的空间。
hash = Math.abs(hash)