如何为庞大的字符串列表计算好的哈希码?

时间:2013-02-01 01:42:34

标签: java string performance hash hashcode

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

好的我的意思是它需要:

1 - fast:我需要为大字符串(10 ^ 3..10 ^ 8项)的短字符串获取哈希码。

2 - 识别整个数据列表这么多列表可能只有几个不同的字符串必须有不同的哈希码

如何用Java做到这一点?

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

谢谢。

1 个答案:

答案 0 :(得分:9)

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

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() );
    }
}

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