2013-08-21 5 views
13

के लिए वैकल्पिक विकल्प Guava Tables का कोई विकल्प है जो कि सामान्य प्रकार के बजाय, कुंजी के रूप में प्राइमेटिव का उपयोग करता है?गुवा तालिका

मैं Java संख्याओं और जावा मैप्स द्वारा बनाई गई अतिरिक्त प्रविष्टि ऑब्जेक्ट्स का उपयोग करके ऑटो-मुक्केबाजी से बचने के लिए प्राइमेटिव का उपयोग करना चाहता हूं।

मैंने Trove TLongObjectMap का उपयोग करके अपना खुद का मूल LongLongObjectTable लॉन्च किया है, लेकिन यदि कोई उपलब्ध है तो मानक लाइब्रेरी का उपयोग करना पसंद करेंगे।

private static class LongLongObjectTable<T> { 
    private final TLongObjectMap<TLongObjectMap<T>> backingMap = new TLongObjectHashMap<>(); 

    T get(final long rowKey, final long columnKey) { 
     final TLongObjectMap<T> map = this.backingMap.get(rowKey); 
     if (map == null) { 
      return null; 
     } 
     return map.get(columnKey); 
    } 

    void put(final long rowKey, final long columnKey, final T value) { 
     TLongObjectMap<T> map = this.backingMap.get(rowKey); 
     if (map == null) { 
      map = new TLongObjectHashMap<>(); 
      this.backingMap.put(rowKey, map); 
     } 
     map.put(columnKey, value); 
    } 

    Collection<T> values() { 
     final List<T> values = new ArrayList<T>(); 
     for (final TLongObjectMap<T> map : this.backingMap.valueCollection()) { 
      values.addAll(map.valueCollection()); 
     } 
     return values; 
    } 
} 
+5

जावा में मानचित्र, सूचियां, सेट ऑब्जेक्ट्स पर काम करती हैं। अंत में मुक्केबाजी वैसे भी आप उनका उपयोग करेंगे। आईएमएचओ इसके खिलाफ लड़ने लायक नहीं है। यदि आपको एक सरल इंटरफ़ेस की आवश्यकता है, तो आप हमेशा इसे प्रतिनिधिमंडल पैटर्न के साथ कार्यान्वित कर सकते हैं जैसे आपने चिपकाया था। – allprog

+2

क्या आपने अपना आवेदन प्रोफाइल किया है? मुक्केबाजी और प्रवेश वस्तुओं के बावजूद आप गुवा के टेबल्स के साथ ठीक हो सकते हैं। –

+2

IMHO यह प्रारंभिक अनुकूलन की तरह लगता है। मैं समझता हूं कि आप जितनी जल्दी हो सके अपने ऐप को चलाने के लिए चाहते हैं। लेकिन एक बोतल-गर्दन होने शुरू करने के लिए ऑटोबॉक्सिंग के लिए, आपको अपनी विशिष्ट समस्या के आधार पर 'n'' के साथ प्रति सेकंड '> 10^एन' ऑपरेशंस की आवश्यकता होगी, हालांकि सामान्य 'n> 3' में। क्या आप वाकई अपना मामला है? –

उत्तर

2

वास्तव में नहीं। समस्या यह है कि इस तरह के कार्यान्वयन सामान्य रूप से सामान्य नहीं हैं (परिभाषा के अनुसार) और एक-एक करके परिभाषित करने की आवश्यकता होगी। इसका मतलब है महत्वपूर्ण पुनरावृत्ति और संभावित रूप से संभावित संग्रह क्रमपरिवर्तन।

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

तथ्य यह है कि आप मौजूदा संग्रह पर लंबे या पूर्णांक जैसे ऑटो-बॉक्स किए गए वेरिएंट का उपयोग कर सकते हैं, अधिकांश मामलों के लिए काफी अच्छा है, क्योंकि ओवरहेड अपेक्षाकृत कम है। इसके अलावा, मानक पुस्तकालय के डिजाइनर शायद इसे अतिरिक्त कस्टम रूपों के साथ प्रदूषित करने के बजाय इसे पतला रखना पसंद करते हैं।

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