2010-08-05 15 views
7

मैं जावा का उपयोग कर रहा हूं और मैं स्ट्रिंग संग्रह (सेट्स और सूचियों) की तलाश में हूं जो अंतरिक्ष में अनुकूलित हैं और तेज़ हैं। मेरे तार निश्चित आकार के हैं: या तो 3 या 5 वर्ण लंबा।जावा में फास्ट स्ट्रिंग संग्रह

कृपया मुझे बताएं कि क्या कोई संग्रह पुस्तकालय उपलब्ध है जो मेरे लिए सबसे उपयुक्त हो सकता है। मैं कुछ शब्दकोश आधारित संग्रहों के बारे में सोच रहा था।

धन्यवाद।

+7

कौन सी भाषा/मंच? –

+4

आपके पास कितने तार हैं, मोटे तौर पर? हजारों? लाखों? अरबों? –

उत्तर

0

मान लीजिए कि आप सी या सी ++ के बारे में बात कर रहे हैं, क्योंकि मैं किसी अन्य भाषा की कल्पना नहीं कर सकता जहां कोई स्ट्रिंग लाइब्रेरी की तलाश करेगा, मैं Paul Hsieh द्वारा उपयोग करने की सलाह दूंगा।

हालांकि मैंने इसे कभी भी उपयोग नहीं किया है, क्योंकि यह मेरे मामले में अभी काम नहीं करता है, मैंने 2007 में अपने स्वयं के उपयोग को आधार के रूप में अपनी अवधारणाओं के साथ अनुकूलित कर लिया है। यह बहुत अच्छी तरह से प्रलेखित है और कम से कम आप उन लिंक पर जाकर और पॉल की सामग्री पर पढ़ने के बारे में एक बड़ा सौदा सीख सकते हैं।

1

यदि मैं गति चाहता था तो मैं सी ++ और एसटीएल और एक कस्टम स्ट्रिंग क्लास 8 बाइट्स तक तय करूँगा। 8 बाइट अच्छी तरह से गठबंधन है और 64 बिट्स की तुलना में एक मशीन निर्देश में तुलना की जा सकती है।

एसटीएल का उपयोग करके आप एक std :: set, std :: map, unordered_set, std :: list, या किसी अन्य एसटीएल संगत संरचना का उपयोग करना चुन सकते हैं।

+0

हैलो मैं जावा कोड अनुकूलित करने के लिए देख रहा हूँ। एप्लिकेशन बहुत सारे स्ट्रिंग संग्रह का उपयोग करता है और मेरे तार निश्चित आकार के हैं – niraj

+0

@ निराज: आपने यह नहीं कहा कि आपके प्रश्न में। मैं आपके लिए अपना प्रश्न संपादित करूंगा लेकिन आपको यह बताने की जरूरत है कि आप अपने प्रश्नों में कौन सी भाषाएं और प्लेटफॉर्म पूछ रहे हैं। –

3

'शब्दकोश आधारित संग्रह'? हैश मैप डिफ़ॉल्ट विकल्प है। यह ओ (1) जितना तेज़ है। और इसमें तत्व के आकार के साथ कुछ भी नहीं है या नहीं।

3

यदि आपका मतलब स्ट्रिंग का संग्रह है, तो मैं जावा के डिफ़ॉल्ट HashSet के साथ जाऊंगा। अगर आपको कुछ और तेज (लुकअप समय के मामले में) की आवश्यकता है, तो आप Trie का उपयोग कर सकते हैं। ट्रेज़ बहुत तेज लुकअप (ओ (स्ट्रिंग की लंबाई) देते हैं) डेटा संरचना में तारों की संख्या के बावजूद, और बहुत कॉम्पैक्ट हो सकता है।

लेकिन, कृपया HashSet के साथ पहले अपने कोड का परीक्षण करें। कई मिलियन छोटे आकार के तारों के साथ, मुझे कल्पना नहीं है कि यह बहुत धीमी होगी।

2

आप वास्तव में सामान्य रूप से "तेज़ संग्रह" नहीं कर सकते हैं, क्योंकि प्रत्येक डेटास्ट्रक्चर की अपनी ताकत और कमजोरी होती है।

यदि आप तेजी से जोड़ना और पुनरावृत्ति चाहते हैं, तो ArrayList एस अच्छे हैं। यदि आप बहुत अधिक निष्कासन करते हैं, तो आप LinkedList एस का उपयोग करना चाहेंगे। यदि आप तेजी से दिखना चाहते हैं, HashSet एस अच्छे हैं, आदि

यदि आपके पास समवर्ती पहुंच है, तो अन्य संभावित रूप से बेहतर उपयुक्त डेटास्ट्रक्चर भी हैं। कभी-कभी एक से अधिक डेटास्ट्रक्चर को संयोजित करने में भी मदद मिल सकती है।

संक्षेप में, आपको हमें बताएं कि आप अपने डेटास्ट्रक्चर का उपयोग करने वाले हैं।

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