सबसे कुशल जावा कलेक्शंस लाइब्रेरी क्या है? [बन्द है]


135

सबसे कुशल जावा कलेक्शंस लाइब्रेरी क्या है?

कुछ साल पहले, मैंने बहुत सारे जावा किए और फिर से यह धारणा थी कि ट्रोव सबसे अच्छा (सबसे कुशल) जावा संग्रह कार्यान्वयन है। लेकिन जब मैं प्रश्न के उत्तर पढ़ें " सबसे उपयोगी मुफ्त जावा पुस्तकालयों? " मैंने देखा है कि निधि शायद ही उल्लेख किया है। तो अब कौन सी जावा कलेक्शंस लाइब्रेरी बेस्ट है?

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


इस तालिका में कुंजियाँ और मूल्य क्या हैं? यदि वे आदिम नहीं हैं, तो सामान्य हाशप आदि के साथ क्या गलत है?
जॉन स्कीट

एक बहुत बड़े मानचित्र के लिए आप एक जांच कार्यान्वयन चाहते हैं, या एक डेटाबेस तालिका की तरह भी इनबिल्ट कर सकते हैं।
टॉम हॉन्टिन -

1
दिलचस्प बात यह है कि मुझे यहां पर कोल्ट का कोई उल्लेख नहीं मिला, जिसे बाद में महतो में रखा गया।
smartnut007

4
यह बहुत अच्छा संग्रह पुस्तकालय - जीएस संग्रह (github.com/goldmansachs/gs-collections) का उल्लेख करने के लायक है। इसमें उत्कृष्ट दस्तावेज़ीकरण और परिवर्तनशील और अपरिवर्तनीय
विभाजन का

जवाबों:


73

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

व्यक्तिगत रूप से (और मैं पक्षपाती हूं) मुझे अमरूद (पूर्व Google जावा संग्रह परियोजना सहित) पसंद है। यह विभिन्न कार्यों (संग्रह सहित) को बहुत आसान बनाता है, एक तरह से जो कम से कम उचित रूप से कुशल है। यह देखते हुए कि संग्रह संचालन शायद ही कभी मेरे कोड में (मेरे अनुभव में) एक अड़चन बनता है, यह संग्रह एपीआई की तुलना में "बेहतर" है जो अधिक कुशल हो सकता है लेकिन मेरे कोड को पठनीय नहीं बनाता है।

यह देखते हुए कि ट्रोव और अमरूद के बीच ओवरलैप बहुत अधिक शून्य है, शायद आप स्पष्ट कर सकते हैं कि आप वास्तव में एक संग्रह पुस्तकालय से क्या देख रहे हैं।


3
@ संकेत: मैं सहमत नहीं कह सकता। ऐसा नहीं है कि यह "एक या दूसरे" परिदृश्य है - मैं नियमित संग्रह (सूची वर्ग जैसे सहायकों के साथ) का उपयोग करता हूं और फिर जब मुझे आवश्यकता होती है तो Iterables आदि का उपयोग करता हूं। जटिलता का उपयोग तभी करें जब वह आपकी मदद करे।
जॉन स्कीट

10
जीसी का उपयोग करने के कई महीनों बाद मेरी अपनी टिप्पणी को पढ़ने के बाद - मैं अपनी पिछली राय से असहमत हूं, और आपके साथ पूरी तरह से सहमत हूं। सहायक विधियों / कक्षाओं का बड़े पैमाने पर उपयोग करें, वे कोड को अधिक पठनीय और सुरक्षित बनाते हैं।
एंड्रियास पीटरसन

1
@ संकेत: वापस आने और ऐसा कहने के लिए धन्यवाद - मुझे यह सुनकर खुशी हुई कि जीजेसी मदद कर रहा है :)
जॉन स्कीट

2
हे, जॉन, Google जावा संग्रह अब अमरूद है । आप भविष्य के संदर्भों के लिए अपनी पोस्ट को अपडेट करना चाह सकते हैं :)
आर्टूर कज्जाका

1
मैंने काफी कुछ डेटा सघन परियोजनाओं पर काम किया है जहाँ संग्रह एक बहुत बड़ी अड़चन थी। जावा कलेक्शंस विशेष रूप से अक्षम (मेमोरी और स्पीड दोनों) हैं, खासकर यदि वे आदिम स्टोर करते हैं।
फरवरी को जे आस्कर सेप

104

प्रश्न (अब) बहुत सारे डेटा को संग्रहीत करने के बारे में है, जिसे intमानचित्र में आदिम प्रकारों का उपयोग करके दर्शाया जा सकता है । यहाँ कुछ उत्तर मेरी राय में बहुत भ्रामक हैं। आइए देखें क्यों।

मैंने रनटाइम और मेमोरी खपत दोनों को मापने के लिए ट्रोव से बेंचमार्क को संशोधित किया । मैंने इस बेंचमार्क में पीसीजे को भी जोड़ा , जो कि आदिम प्रकारों के लिए एक और संग्रह पुस्तकालय है (मैं इसका उपयोग बड़े पैमाने पर करता हूं)। 'आधिकारिक' ट्रावेल बेंचमार्क IntIntMaps की तुलना Java Collection से नहीं करता है Map<Integer, Integer>, शायद भंडारण Integersऔर भंडारण intsतकनीकी दृष्टिकोण से समान नहीं है। लेकिन एक उपयोगकर्ता इस तकनीकी विवरण के बारे में परवाह नहीं कर सकता है, वह intsकुशलता से डेटा का प्रतिनिधित्व करने योग्य बनाना चाहता है ।

पहले कोड का प्रासंगिक हिस्सा:

new Operation() {

     private long usedMem() {
        System.gc();
        return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
     }

     // trove
     public void ours() {
        long mem = usedMem();
        TIntIntHashMap ours = new TIntIntHashMap(SET_SIZE);
        for ( int i = dataset.size(); i-- > 0; ) {
           ours.put(i, i);
        }
        mem = usedMem() - mem;
        System.err.println("trove " + mem + " bytes");
        ours.clear();
     }

     public void pcj() {
        long mem = usedMem();
        IntKeyIntMap map = new IntKeyIntOpenHashMap(SET_SIZE);
        for ( int i = dataset.size(); i-- > 0; ) {
           map.put(i, i);
        }
        mem = usedMem() - mem;
        System.err.println("pcj " + mem + " bytes");
        map.clear();
     }

     // java collections
     public void theirs() {
        long mem = usedMem();
        Map<Integer, Integer> map = new HashMap<Integer, Integer>(SET_SIZE);
        for ( int i = dataset.size(); i-- > 0; ) {
           map.put(i, i);
        }
        mem = usedMem() - mem;
        System.err.println("java " + mem + " bytes");
        map.clear();
     }

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

gc()WinXP पर रनटाइम परिणाम (बिना कॉल के, निश्चित रूप से) jdk1.6.0_10:

                      100000 पुट ऑपरेशंस में 100000 ऑपरेशन शामिल हैं 
जावा संग्रह 1938 एमएस 203 एमएस
ट्रोव 234 एमएस 125 एमएस
पीसीजे 516 एमएस 94 एमएस

हालांकि यह पहले से ही कठोर लग सकता है, यह इस तरह के ढांचे का उपयोग करने का कारण नहीं है।

वजह है मेमोरी परफॉर्मेंस। 100000 intप्रविष्टियों वाले मानचित्र के परिणाम :

जावा संग्रह 6644536 और 7168840 बाइट्स के बीच दोलन करता है
ट्रोव 1853296 बाइट्स
पीसीजे 1866112 बाइट्स

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

मेरे अनुभव में उच्च मेमोरी खपत जावा के साथ सबसे बड़ा प्रदर्शन मुद्दा है, जो निश्चित रूप से खराब रनटाइम प्रदर्शन के रूप में अच्छी तरह से परिणाम देता है। आदिम संग्रह चौखटे वास्तव में यहाँ मदद कर सकते हैं।

तो: नहीं, java.util जवाब नहीं है। और जावा संग्रह में "कार्यक्षमता जोड़ना" दक्षता के बारे में पूछने पर बात नहीं है। इसके अलावा आधुनिक JDK संग्रह "विशेष ट्रोव संग्रह को भी बाहर नहीं करते हैं"।

अस्वीकरण: यहाँ बेंचमार्क पूर्ण से दूर है, और न ही यह सही है। यह घर को उस बिंदु पर चलाने के लिए है, जिसे मैंने कई परियोजनाओं में अनुभव किया है। यदि आप बहुत सारे डेटा के साथ काम करते हैं तो आदिम संग्रह मछलियों के एपीआई को सहन करने के लिए पर्याप्त उपयोगी हैं ।


3
दरअसल, मुझे लगता है कि आपका जवाब भ्रामक है। इंटर्ज़ बनाम इन्टर्स को संग्रहीत करना बहुत अलग है, और सबसे अधिक संभावना है कि मेमोरी के उपयोग में वृद्धि। मैं मानता हूं कि एक कच्चे प्रकार का संग्रह ढांचा उपयोगी हो सकता है, लेकिन यह java.util की तुलना में ट्रोव या पीसीजे को "बेहतर" नहीं बनाता है।
जोर्न

22
सवाल इंट डेटा को कुशलता से संग्रहीत करने के बारे में है। इंटेगर के भंडारण के बारे में नहीं। इस कार्य के लिए ट्रोव / पीसीजे अधिक कुशल हैं, जैसा कि मैंने दिखाने की कोशिश की। Integers का उपयोग रनटाइम और मेमोरी अक्षमताओं को लागू करता है। चूँकि java.util आदिमों के उपयोग की अनुमति नहीं देता है, यह इस कार्य के लिए सबसे अच्छा विकल्प नहीं है।
द डडमैन

2
(रूसी समुदाय के लिए) यहां एक और बेंचमार्क जाता है: Total-holywar.blogspot.com/2011/07/…
dma_k

यकीन नहीं है कि अगर हम int को कुंजी के रूप में उपयोग नहीं करते हैं, तो बस सामान्य स्ट्रिंग। उनके लिए कार्यक्षेत्र परिणाम क्या होगा?
क्लार्क बाओ

@ClarkBao (देर होने के लिए क्षमा करें) किसी भी ऑब्जेक्ट को कुंजी के रूप में संग्रहीत करना ऑब्जेक्ट का उपयोग करेगा hashCode()। यह आपको intकुंजी के रूप में मिलता है ।
मैथ्यू

47

मुझे पता है कि यह एक पुरानी पोस्ट है और यहां एक टन उत्तर हैं। लेकिन, उपर्युक्त उत्तर एक पुस्तकालय का सुझाव देने के संदर्भ में सतही और अधिक सरलीकृत हैं। कोई भी पुस्तकालय नहीं है जो यहाँ प्रस्तुत विभिन्न बेंचमार्क में अच्छा करता है। एकमात्र निष्कर्ष मुझे लगता है कि यदि आप प्रदर्शन और स्मृति की परवाह करते हैं और विशेष रूप से आदिम प्रकारों से निपटते हैं, तो यह गैर-जेडीके विकल्पों को देखने के लायक है।

यहां बेंचमार्क मैकेनिक्स और कवर किए गए पुस्तकालयों के संदर्भ में अधिक ध्वनि विश्लेषण है। यह महावत देव सूची में एक धागा है।

कवर किए गए पुस्तकालय हैं

  • HPPC
  • निधि
  • FastUtil
  • महावत (बछेड़ा)
  • जावा संग्रह

अपडेट जून 2015 : दुर्भाग्य से, मूल बेंचमार्क अब उपलब्ध नहीं हैं और इसके अलावा यह थोड़ा पुराना है। यहाँ हाल ही में (जनवरी 2015) बेंचमार्क किसी और के द्वारा किया गया है। यह उतना व्यापक नहीं है और न ही इसमें मूल लिंक के रूप में संवादात्मक खोज उपकरण हैं।


1
धन्यवाद। यह बहुत मददगार था .. सवाल के महत्व को देखते हुए यह विश्वास करना मुश्किल है कि अन्य उत्तरों में से कोई भी (The.duckman के अलावा) वास्तव में इस प्रश्न का उत्तर नहीं देता है।
डेक्सटर

20

जैसा कि अन्य टिप्पणीकारों ने देखा है, "कुशल" की परिभाषा एक व्यापक जाल है। हालाँकि किसी ने अभी तक Javolution पुस्तकालय का उल्लेख नहीं किया है ।

हाइलाइट्स में से कुछ:

  • Javolution कक्षाएं तेज़ हैं, बहुत तेज़ हैं (उदाहरण के लिए टेक्स्ट स्ट्रिंग / विलोपन O [Log (n)] में O [n] के बजाय मानक StringBuffer / StringBuilder)।
  • सभी Javolution कक्षाएं कठिन वास्तविक समय के अनुरूप हैं और उच्च नियतात्मक व्यवहार (माइक्रोसेकंड रेंज में) हैं। इसके अलावा (मानक पुस्तकालय के विपरीत), Javolution आरटीएसजे सुरक्षित है (जावा रियल-टाइम एक्सटेंशन के साथ उपयोग किए जाने पर कोई मेमोरी क्लैश या मेमोरी लीक नहीं है)।
  • Javolution के वास्तविक समय संग्रह कक्षाएं (नक्शा, सूची, तालिका और सेट) का उपयोग अधिकांश मानक संग्रह कक्षाओं के स्थान पर किया जा सकता है और अतिरिक्त कार्यक्षमता प्रदान कर सकता है।
  • Javolution संग्रह समांतर एल्गोरिदम के कार्यान्वयन को आसान बनाने के लिए संगणक गारंटी प्रदान करते हैं।

जावास्क्रिप्ट वितरण में एक बेंचमार्क सूट शामिल है ताकि आप देख सकें कि वे अन्य पुस्तकालयों / अंतर्निहित संग्रह के खिलाफ कैसे ढेर हो जाते हैं।


16

कुछ संग्रह लिबास पर विचार करने के लिए:

मैं जेडडीके संग्रह पुस्तकालय के लिए सबसे पहले और सबसे पहले पहुंचूंगा। इसमें उन सबसे सामान्य चीजों को शामिल किया गया है जो आपको करने की आवश्यकता है और जाहिर है कि यह पहले से ही आपके लिए उपलब्ध है।

Google संग्रह संभवतः JDK के बाहर उच्च-गुणवत्ता वाली लाइब्रेरी है। यह भारी उपयोग और अच्छी तरह से समर्थित है।

अपाचे कॉमन्स कलेक्शंस पुराना है और "बहुत सारे रसोइयों" समस्या से थोड़ा ग्रस्त है लेकिन इसमें बहुत उपयोगी सामान भी है।

आदिम कुंजियों / मूल्यों जैसे मामलों के लिए ट्रोव के पास बहुत विशिष्ट संग्रह हैं। इन दिनों हम पाते हैं कि आधुनिक JDKs पर और Java 5+ कलेक्शन और समवर्ती उपयोग के मामलों के साथ, JDK संग्रह विशेष ट्रोव संग्रह भी करता है।

यदि आपके पास वास्तव में उच्च संगामिति उपयोग के मामले हैं, तो आपको निश्चित रूप से हाई-स्केल लिब में NonBlockingHashMap जैसे सामान की जांच करनी चाहिए, जो कि लॉक-फ्री कार्यान्वयन है और यदि आप इसके लिए सही उपयोग का मामला रखते हैं, तो ConcurrentHashMap पर स्टॉपप कर सकते हैं।


7
"इन दिनों हमें पता चलता है कि आधुनिक JDKs पर और जावा 5+ संग्रह और समवर्ती उपयोग के मामलों के साथ, JDK संग्रह विशेष ट्रोव संग्रह भी करता है।" भ्रामक - मैंने कभी भी एक माइक्रो-बेंचमार्क नहीं देखा है जहां ट्रोव की तरह एक विशेष आदिम-संग्रह वर्ग में आदिम प्रकारों को संग्रहीत / पुनर्प्राप्त करना स्मृति के उपयोग और सीपीयू समय दोनों में जेडडीके संग्रह कक्षाओं से बेहतर प्रदर्शन नहीं करता था। यदि आप वस्तुओं का उपयोग कर रहे हैं (और आदिम प्रकार नहीं), तो मैं एलेक्स के साथ सहमत हो जाऊंगा, संग्रह से अधिक झल्लाहट करना एक सौदे के रूप में बड़ा नहीं है।
रियाद कल्ला

2
यह कथन भारी वास्तविक दुनिया के उपयोग पर आधारित था (जो कि मैं किसी भी दिन एक माइक्रो-बेंचमार्क पर कब्जा कर लूंगा) विभिन्न संग्रह प्रत्यारोपण जहां हमने पूर्व में एक ट्रोव संग्रह की आवश्यकता थी, पर अब इसे बाहर निकालने में सक्षम थे। स्वर्गीय JDK 6 अपडेट (लगभग 2009 के अंत में) वास्तव में सामान्य मानचित्र कुंजी के लिए कस्टम कोड प्रदान किया जैसे कि इंटेगर ने कुछ सबसे आम उपयोगों में काफी सुधार किया है।
एलेक्स मिलर

1
एलेक्स, मुझे आपके विशिष्ट उपयोग-मामलों में संदेह नहीं है कि आदिम संग्रह को बाहर निकालना और जेडीके संग्रह के साथ जाना काफी तेज था, लेकिन आपके हाथ उस परिदृश्य पर लहराते हैं जो संग्रह है और कह रहा है "ऑल यू दैट पास, यह काफी तेज है! " सटीक नहीं है। अगर मैं 2 डी गेम इंजन पर काम कर रहा हूं, तो मेरे आदिम प्रकारों के बॉक्सिंग / अनबॉक्सिंग का ओवरहेड औसत रूप से महंगा है। अगर मैं REST API पर काम कर रहा हूं, तो नहीं, यह संभवतः HTTP I / O जैसे बहुत अधिक महंगे ऑप्स के संबंध में औसत दर्जे का अलग नहीं है। मैं बस अपने पद को निर्धारित करने के लिए मजबूर महसूस किया है।
रियाद कल्ला

4
मुझे नहीं लगता कि इसे पढ़ने वाले किसी को भी हमारी बात सुननी चाहिए। उन्हें अपने स्वयं के उपयोग के मामले का परीक्षण करना चाहिए और देखना चाहिए कि सबसे अच्छा प्रदर्शन क्या है। मेरी टिप्पणियाँ विभिन्न पुस्तकालयों के साथ मेरी टीम के काफी आक्रामक प्रदर्शन परीक्षणों पर आधारित हैं। YMMV।
एलेक्स मिलर

2
मैं @ रियाद से सहमत हूं। मैं एक उच्च-प्रदर्शन परिमित ऑटोमेटा सूट लिख रहा हूं और इसे ट्रोव और जावा कलेक्शंस फ्रेमवर्क (jdk 6 नवीनतम संस्करण) के साथ लागू किया है। बड़े समय से बेहतर प्रदर्शन करते हैं। गणना गति और स्मृति खपत दोनों में दसियों गुना बेहतर है।
निको Huysamen

6

java.util

स्पष्ट उत्तर के लिए क्षमा करें, लेकिन अधिकांश उपयोगों के लिए, डिफ़ॉल्ट जावा संग्रह पर्याप्त से अधिक हैं।


4
बुनियादी उपयोगों के लिए, हाँ। लेकिन मुझे लगता है कि रूपरेखा कुछ बुनियादी और उन्नत सुविधाओं (जैसे अपरिवर्तनीय संग्रह, फ़िल्टर, मल्टीमैप, आदि) को याद करती है और वह है जहाँ (उदाहरण के लिए) Google संग्रह आता है
जोर्न

1
मुझे लगता है कि यह उत्तर बात याद आती है। JCF शायद 2002 में कमाल का था जब लोग जावा का ज्यादा इस्तेमाल नहीं करते थे। दुर्भाग्य से यह अच्छी तरह से वृद्ध नहीं हुआ है, खासकर जब अन्य जेवीएम भाषाओं के संग्रह समर्थन की तुलना में।
टेड पेन्निंग्स

3
-1 सवाल "
इंटिंग

6

Stringएक नक्शे में लाखों स्टोर करने के लिए , http://code.google.com/p/flatmap पर एक नज़र डालें


3
+1 क्या आप इसे बढ़ा सकते हैं?
क्लार्क बाओ

1
इंटरनेट पर कहीं भी फ्लैटमैप के लेखक द्वारा ब्लॉग पोस्ट होनी चाहिए।
आखुण


3

java.util.concurrentयदि आप कई थ्रेड्स में HashMap का उपयोग करने की योजना बना रहे हैं, तो ConcurrentHashMap और साथ ही पैकेज का उल्लेख किया जाना चाहिए। छोटे स्मृति पदचिह्न को मार दिया जाता है, क्योंकि यह मानक जावा का हिस्सा है।


3

निर्भर करता है कि हम "कुशल" को कैसे परिभाषित करते हैं।

प्रत्येक डेटा संरचना में पढ़ने, लिखने, पुनरावृत्ति, मेमोरी फ़ुटप्रिंट आदि के लिए अपना स्वयं का बिग-ओह व्यवहार है, एक पुस्तकालय में एक लिंक की गई सूची किसी अन्य के समान होने की संभावना है। और एक हैश मैप O (1) से लिंक की गई सूची O (n) को पढ़ने के लिए तेज़ होगा।

लेकिन जब मैंने प्रश्न का उत्तर "सबसे उपयोगी मुफ्त जावा पुस्तकालयों?" मैंने देखा कि ट्राव का उल्लेख शायद ही हो।

यह "सबसे कुशल" की तरह ध्वनि नहीं करता है। यह मुझे "सबसे लोकप्रिय" लगता है।

बस कुछ प्रतिक्रिया - मैंने इसके बारे में कभी नहीं सुना है, और मैं किसी को भी नहीं जानता जिसने इसका इस्तेमाल किया है। JDK, Google, या Apache Commons में निर्मित संग्रह मुझे अच्छी तरह से ज्ञात हैं।


3

ट्रोव कुछ फायदे प्रदान करता है।

  • छोटे स्मृति पदचिह्न, यह Map.Entry ऑब्जेक्ट का उपयोग नहीं करता है
  • आप मानचित्रों की बजाय हैश रणनीतियों का उपयोग कर सकते हैं, इससे मेमोरी की बचत होती है और इसका मतलब है कि आपको हर बार एक नई कुंजी को परिभाषित करने की आवश्यकता नहीं होती है जब आप किसी वस्तु को उसके गुणों के नए सेट पर कैश करना चाहते हैं
  • इसमें आदिम संग्रह प्रकार हैं
  • सोचें कि इसका आंतरिक रूप कुछ है

कहा गया है, ट्रंक लिखे जाने के बाद से jdk संग्रहों को बेहतर बनाने के लिए बहुत कुछ किया गया है।

यह हैशिंग की रणनीतियाँ हैं, जो इसे मेरे लिए आकर्षक बनाती हैं ... गूगल ट्रिब्यूट के लिए और उनके अवलोकन को पढ़ने के लिए।


2

यदि आप एक हैश तालिका में लाखों रिकॉर्ड संग्रहीत करना चाहते हैं, तो संभावना है कि आप स्मृति समस्याओं में भाग लेंगे। यह मेरे साथ तब हुआ जब मैंने 2.3 मिलियन स्ट्रिंग ऑब्जेक्ट्स के साथ एक नक्शा बनाने की कोशिश की, उदाहरण के लिए। मैं साथ चला गया BerkeleyDB , जो बहुत परिपक्व और प्रदर्शन कर रहा है अच्छी तरह से। उनके पास एक जावा एपीआई है जो कलेक्शंस एपीआई को लपेटता है, इसलिए आप बहुत कम मेमोरी फुटप्रिंट के साथ आसानी से मनमाने ढंग से बड़े नक्शे बना सकते हैं। प्रवेश धीमा होगा (हालांकि यह डिस्क पर संग्रहीत है)।

अनुवर्ती सवाल : क्या एक सभ्य (और कुशल), अच्छी तरह से बनाए रखा है, अपरिवर्तनीय संग्रह के लिए पुस्तकालय? क्लोजर को इसके लिए उत्कृष्ट समर्थन है, और जावा के लिए कुछ समान होना अच्छा होगा।


1
Google संग्रह अपरिवर्तनीय संग्रह जोड़ता है।
the.duckman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.