7

一次根据这些字符串的值计算哈希码的最佳方法是什么?

好的,我的意思是它需要:

1 - 快速:我需要获取大量短字符串列表(10^3..10^8 项)的哈希码。

2 - 识别整个数据列表,因此可能只有几个不同字符串的列表必须具有不同的哈希码

如何在 Java 中做到这一点?

也许有一种方法可以使用现有的字符串哈希码,但是如何合并为单独的字符串计算的许多哈希码?

谢谢你。

4

1 回答 1

10

为您的字符串创建一个占位符类,然后使用CRC32 类。它简单快捷:

import java.util.zip.CRC32;

public class HugeStringCollection {
    private Collection<String> strings;

    public HugeStringCollection(Collection<String> strings) {
        this.strings = strings;
    }

    public int hashCode() {
        CRC32 crc = new CRC32();
        for(String string : strings) {
            crc.update(string.getBytes())
        }

        return (int)( crc.getValue() );
    }
}

如果集合本身是不可变的,您可以计算一次哈希并将其存储以供后期重用。

于 2013-02-01T02:43:01.433 回答