2013-02-01 48 views
5

एक स्ट्रिंग में इन स्ट्रिंग के मानों के आधार पर हैश कोड की गणना करने का सबसे अच्छा तरीका क्या है?तारों की एक विशाल सूची के लिए एक अच्छा हैश कोड की गणना कैसे करें?

अच्छा साथ

मेरा मतलब है कि यह होने की जरूरत है:

1 - तेजी से: मैं छोटी स्ट्रिंग की भारी सूची (10^3..10^8 आइटम) के लिए हैश कोड प्राप्त करने की आवश्यकता।

2 - विभिन्न तार की शायद ही जोड़े के साथ डेटा की पूरी सूची इतने सारे सूची की पहचान अलग हैश कोड

कैसे जावा में यह करने के लिए होना आवश्यक है?

शायद मौजूदा स्ट्रिंग हैश कोड का उपयोग करने का एक तरीका है, लेकिन अलग-अलग तारों के लिए गणना किए गए कई हैश कोड कैसे विलय करें?

धन्यवाद।

+2

"अच्छा" क्या है? –

+1

आप हैश कोड के लिए क्या चाहते हैं? क्या आप सिर्फ एक हैश चाहते हैं, या प्रत्येक स्ट्रिंग के लिए एक? –

+0

क्या आप चाहते हैं कि ** हैश कोड ** जावा जैसे मूल्यों में पहले से ही स्ट्रिंग पर 'हैशकोड()' विधि है जो एक int देता है या, क्या आप एमडी 5 डाइजेस्ट जैसे हैश मान चाहते हैं? –

उत्तर

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

यदि संग्रह ही अपरिवर्तनीय है, आप एक बार हैश की गणना और यह स्टोर lates का पुन: उपयोग के लिए कर सकते हैं।

+0

सीआरसी तेजी से लगता है, डेटा का प्रतिनिधित्व करने में यह कितना अच्छा है? – Bohdan

+0

यह वर्षों से फाइल प्रसंस्करण में व्यापक रूप से उपयोग किया गया है, उदाहरण के लिए ज़िप संपीड़न में – mantrid

+0

@mantrid आप इसे अक्षरों की सरणी सूची के लिए कैसे काम करते हैं? जैसा कि मुझे लगता है कि हमें चरित्र के लिए बाइट्स नहीं मिला है !? –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^