2010-06-18 17 views
11

मैंने कल रात लार्क पर बहु_इंडेक्स पर ठोकर खाई, जबकि मेरे पास एक संग्रह के खिलाफ था जो मुझे 3 अलग-अलग महत्वपूर्ण मूल्यों तक पहुंचने की आवश्यकता है, और रीबैलेंसिंग सरणी अर्थशास्त्र भी है। खैर मुझे boost :: multi_index में मेरी दो इच्छाओं (3 अलग-अलग महत्वपूर्ण मान) में से एक मिला है।क्या जावा के लिए boost :: multi_index के बराबर है?

यदि मैं जावा दुनिया में कुछ भी मौजूद हूं तो मुझे उत्सुकता है।

+0

जा overkill (इसलिए टिप्पणी), आप एक एम्बेडेड डीबी इस के लिए विचार हो सकता है? बहुत हल्के वजन वाले डीबी हैं जिन्हें आप स्मृति में एम्बेड और चला सकते हैं, मुझे लगता है कि यह आपकी प्रदर्शन आवश्यकताओं पर निर्भर करता है .... – Nim

उत्तर

-2

मैं वहाँ कोई स्पष्ट बराबर है पता नहीं क्या बढ़ावा :: multi_index साधन है, लेकिन आपके सवाल का के बाकी के आधार पर, मुझे लगता है कि आप एक multi key map

+0

नहीं, क्षमा करें। यह एक कमजोर टाइप, समग्र कुंजी कंटेनर का एक उदाहरण है। boost :: multi_index दृढ़ता से टाइप किया गया है, लेकिन अधिक महत्वपूर्ण बात यह है कि इसमें एकाधिक, स्वतंत्र कुंजी हैं। अर्थात। व्यक्तियों के multi_index_container में, आप किसी व्यक्ति को नाम, एसएसएन, या जन्मतिथि देख सकते हैं। (जाहिर है नाम और डीओबी अद्वितीय कुंजी नहीं होगी) – MSalters

1

बारे में बात कर रहा हो सकता है मुझे लगता है कि कम जवाब नहीं है है,।

बूस्ट मल्टी-इंडेक्स क्लास बहुत भारी टेम्पलेट है, जो जावा में आसानी से अनुवाद योग्य नहीं है। जेनेरिक हैं, लेकिन वे बिल्कुल समान नहीं हैं। (How are Java generics different from C++ templates? Why can't I use int as a parameter?)।

तो बिना किसी टेम्पलेट के, बहु-सूचकांक वर्ग कैसा दिखता है?

मुझे लगता है कि आपके पास अपनी डेटा क्लास होगी, उदा। व्यक्ति, जिसमें मैप कार्यान्वयन जैसे इंडेक्स सदस्य होते हैं। इस बिंदु पर, आप एक विकल्प हैं:

  1. कुछ "अनुक्रमणिका" सीधे को व्यक्ति वर्ग (कुछ hashtables) की तरह जोड़ें और देखने कार्यों लिखें। व्यक्ति व्यक्ति कक्षा के भीतर सिंक्रनाइज़ेशन प्रबंधित करें। गतिशील रूप से विभिन्न सूचकांक प्रकार बना यह करने में सक्षम हो करने के लिए होता है और मैं कल्पना कर सकते हैं आप कॉलबैक के माध्यम से संभाल तुल्यकालन होगा -
  2. एक "IndexProvider" वर्ग कि व्यक्ति से पूरी तरह से सूचकांक कार्यक्षमता अलग करता लिखें।
  3. 1 में से कुछ मिश्रण) और 2) - सूचकांक कार्यक्षमता के लिए एक सार आधार वर्ग है, जो ठीक से व्यवहार दसगुणा नहीं करता है लेकिन कुछ कोड पुन: उपयोग प्रदान करता है।

मुझे लगता है कि, अधिकांश मामलों में 1) लिखना सबसे आसान है, बनाए रखने के लिए सबसे आसान है और शायद सबसे अधिक प्रदर्शन करने वाला है। 2) ओवर-इंजीनियरिंग की तरह लगता है।

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

+0

मैंने Google guava के बारे में बात करते हुए नया जवाब पोस्ट किया। यह समाधान हो सकता है – gavioto

2

मैंने अभी जावा में मल्टीइंडेक्सकंटनर समाप्त कर दिया है: http://code.google.com/p/multiindexcontainer/wiki/MainPage। मुझे पता है कि यह boost mult_index_container को बढ़ावा देने के बराबर नहीं है लेकिन शायद यह आपकी आवश्यकता के लिए पर्याप्त हो सकता है।

+0

धन्यवाद, मुझे एक नज़र आएगी। –

+0

इंटरफ़ेस अच्छा लग रहा है और वास्तव में बहु सूचकांक आवश्यकता हल करता है। – Alex

+0

वाह, शायद मेरे पुराने प्रोजेक्ट को इतने लंबे समय के बाद पुनर्जीवित करने का समय :-) बीटीडब्ल्यू मैंने इसे गिटब https://github.com/Kamosh/multiindexcontainer पर निर्यात किया है लेकिन यह कहने में मुश्किल है कि यह किस आकार में है। –

-1

मुझे लगता है कि आप गूगल अमरूद पुस्तकालय में जवाब के लिए मिल सकता है। शायद मल्टीमैप्स अपनी आवश्यकताओं को हल करें।

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

इन धागे में टिप्पणी के रूप में:

+0

'multi_index' का अर्थ है कि आप एकाधिक कुंजी के साथ एक मान डाल सकते हैं और प्रत्येक कुंजी द्वारा समूहबद्ध कर सकते हैं। फ़ाइलों के मानचित्र की तरह कुछ कल्पना करें, एक बार नाम से कुंजी और एक बार एक्सटेंशन द्वारा कुंजी और इसी तरह। – Alex