2013-02-01 9 views
5

ワンパスでこれらの文字列の値に基づいてハッシュコードを計算する最適な方法は何ですか?良いと巨大な文字列リストの良いハッシュコードを計算するには?

私はそれがあることが必要であることを意味:

1 - 高速:私は、短い文字列の膨大なリスト(10^^ 3..10 8つの項目)のハッシュコードを取得する必要があります。

2 - 多分異なる文字列の唯一のカップルが異なるハッシュコードJavaでそれを行う方法を

を持たなければならないとデータ非常に多くのリストのリスト全体を確認?

多分、既存の文字列ハッシュコードを使用する方法がありますが、別々の文字列に対して計算された多くのハッシュコードをマージする方法はありますか?

ありがとうございます。

+2

「良い」とは何ですか? –

+1

何をハッシュコードにしたいですか? 1つのハッシュだけか、各文字列ごとに1つだけ必要ですか? –

+0

**ハッシュコード** javaのような値にintを返すStringのhashCode()メソッドが既にあるか、MD5ダイジェストのようなハッシュ値が必要ですか? –

答えて

8

文字列のプレースホルダクラスを作成し、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()); 
    } 
} 

コレクション自体が不変の場合、ハッシュを一度計算し、それを保存して再利用することができます。

+0

crcは速く聞こえますが、データを表現するのにどれくらい効果がありますか? – Bohdan

+0

これは、長年のファイル処理で広く使用されています。 ZIP圧縮で – mantrid

+0

@mantridあなたはCharactersのarraylistのためにこれをどのように動かすのですか?私たちはキャラクターのためにgetBytesを持っていないと思います! –

関連する問題