7

1 回のパスでこれらの文字列の値に基づいてハッシュ コードを計算する最良の方法は何ですか?

良いとは、次のようにする必要があることを意味します。

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

コレクション自体が不変である場合は、ハッシュを1回計算し、それを保存してレイトで再利用できます。

于 2013-02-01T02:43:01.433 に答える