2013-02-01 124 views
14

मेरे पास Map<String, Map<String, String>> ऑब्जेक्ट्स के साथ कुछ कोड है, जो काम करता है (इसे हैशमैप्स के हैश मैप के रूप में तत्काल किया जाता है), लेकिन मुझे आश्चर्य है कि गुवा में इस डेटा संरचना का प्रतिनिधित्व करने का एक बेहतर तरीका है या नहीं।गुवा में मानचित्र में मानचित्र

मैंने Multimap पर विचार किया है, लेकिन गुवा में ListMultimap और SetMultimap है, मुझे कोई "MapMultimap" नहीं मिला है।

मैंने Table भी चेक किया है, जो ऐसा लगता है, लेकिन इसका नाम मुझे असहज बना रहा है: मेरे पास निश्चित रूप से एक टेबल नहीं है लेकिन एक पेड़ है। (दूसरी चाबियों के बीच कोई ओवरलैप नहीं है)

क्या कोई बेहतर अमरूद विकल्प है या क्या मुझे Map<String, Map<String, String>> के साथ रहना चाहिए?

+1

आंतरिक 'मानचित्र' कैसा दिखता है? इसे उचित वर्ग के साथ बदलने के बारे में क्या है, तो आपके पास 'मानचित्र <स्ट्रिंग, कुछ ऑब्जेक्ट>' होगा? –

+0

@ फिलिप रीचर्ट: फिर मेरे कुछ ऑब्जेक्ट को एक आंतरिक मानचित्र होना चाहिए, इसलिए मुझे नहीं पता कि मेरा कोड कैसे आसान हो जाएगा ... – WannaKnow

+1

यही कारण है कि मैंने पूछा कि आंतरिक मानचित्र कैसा दिखता है: यदि उनके सभी में एक ही कुंजी है (उदाहरण के लिए "firstName" ',' "lastName" ', ...), आप उन्हें 'व्यक्ति {स्ट्रिंग फर्स्टनाम' जैसी कक्षाओं के उदाहरणों के साथ प्रतिस्थापित कर सकते हैं; स्ट्रिंग अंतिम नाम; ...} '। यदि हर आंतरिक मानचित्र अलग है, तो यह निश्चित रूप से काम नहीं करेगा। –

उत्तर

23

Table आपकी आवश्यकता के लिए उपयुक्त लगता है। लेकिन सुनिश्चित करें कि आप उचित कार्यान्वयन का चयन करें। विशेष रूप से, यदि आपकी दूसरी कुंजी सभी अलग हैं (तालिका में कॉलम) परिणामस्वरूप तालिका स्पैस होगी और आपको स्मृति उपयोग को प्रबंधित करने के लिए इसे ध्यान में रखना चाहिए।

तो आपको ArrayTable से बचना चाहिए, लेकिन किसी भी अन्य कार्यान्वयन का उपयोग कर सकते हैं। ध्यान दें कि docs उल्लेख है कि ImmutableTable ने स्पार्सर और डेंसर डेटा सेट के लिए कार्यान्वयन को अनुकूलित किया है।

अपने Table एक ही बार में निर्माण किया है, तो आप इस अनुकूलन से एक ImmutableTable.Builder और लाभ का उपयोग कर सकते है और साथ ही अपने जीवन को आसान बनाने में करता है, तो तालिका कई धागे के बीच साझा किया जाता है।

12

गुवा के Table इंटरफ़ेस पर एक नज़र डालें।

आमतौर पर, जब आप एक समय में एक से अधिक कुंजी पर सूचकांक की कोशिश कर रहे हैं, तो आप की तरह कुछ के साथ हवा जाएगा:

इसके documentation उदाहरण आपके यूज-केस के साथ काफ़ी ओवरलैप करने लगता है मानचित्र < फर्स्टनाम, मानचित्र < अंतिम नाम, व्यक्ति > >, जो उपयोग करने के लिए बदसूरत और अजीब है। अमरूद एक नया संग्रह प्रकार, तालिका प्रदान करता है, जो किसी भी "पंक्ति" प्रकार और "कॉलम" प्रकार के लिए इस उपयोग केस का समर्थन करता है।