2013-02-01 7 views
5

Qual è il modo migliore per calcolare il codice hash in base ai valori di queste stringhe in un unico passaggio?Come calcolare un buon codice hash per un enorme elenco di stringhe?

Con buona voglio dire che ha bisogno di essere:

1 - veloce: ho bisogno di ottenere codice hash per lista enorme (10^3..10^8 articoli) di brevi stringhe.

2 - identificare l'intero elenco di dati così tanti lista con forse solo paio di diverse stringhe devono avere diversi codici hash

Come fare in Java?

Forse c'è un modo per utilizzare il codice hash stringa esistente, ma come unire molti codici hash calcolati per stringhe separate?

Grazie.

+2

Che cos'è "buono"? –

+1

Per cosa si desidera il codice hash? Vuoi solo un hash o uno per ogni stringa? –

+0

Vuoi ** codice hash ** valori come java ha già il metodo 'hashCode()' su String che restituisce un int o, vuoi valori hash come digest MD5? –

risposta

8

creare una classe segnaposto per le stringhe e quindi utilizzare CRC32 class. la sua semplice e veloce:

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

se la raccolta stessa è immutabile, è possibile calcolare l'hash una volta e di memorizzarlo per lates riutilizzo.

+0

crc suona veloce, quanto è buono a rappresentare i dati? – Bohdan

+0

è stato ampiamente utilizzato nell'elaborazione di file per anni, ad es. in compressione ZIP – mantrid

+0

@mantrid come si converte questo per funzionare per un arraylist di caratteri? come suppongo che non abbiamo getBytes per carattere !? –

Problemi correlati