2013-07-03 11 views
6

में तत्वों की मात्रा मैं चैट एप्लिकेशन बना रहा हूं। वर्तमान में मेरे पास ArrayList में सभी संदेश हैं, जो मुझे सोचते हैं - ArrayList डिज़ाइन कितने तत्व हैं? 100? 1.000? 10.000?ArrayList

+0

थ्रेडिंग समस्याओं से सावधान रहें। – SLaks

+0

शायद यह मदद करता है: http://www.coderanch.com/t/524745/java/java/Maximum-capacity-arrayList-String-objects –

+0

@MarounMaroun सभी के पास बंद करने के लिए पर्याप्त प्रतिनिधि नहीं है। – CPerkins

उत्तर

11

ArrayListInteger.MAX_VALUE तत्वों से अधिक नहीं हो सकता है।

तो 2147483647 अधिकतम है।

3

ऐरेलिस्ट Integer.MAX_VALUE तक किसी भी तत्व को पकड़ सकता है - यह इंडेक्स के लिए int डेटाटाइप का उपयोग करने के डिज़ाइन निर्णय के कारण है। हालांकि महत्वपूर्ण बात यह है कि आप इसके लिए स्मृति आवंटित कैसे कर रहे हैं - स्मृति आवंटन धीमा है - और आप तत्वों को कैसे संसाधित/एक्सेस कर रहे हैं। अकेले भंडारण पहलू से, हालांकि, आप MAX_VALUE तक सीमित हैं। जावा में, यह 2^31-1 = 2,147,483,647 है।

किसी सामान्य एप्लिकेशन के लिए यह पर्याप्त होना चाहिए। फिर भी, यदि आपको और अधिक चाहिए, तो आप इसके लिए स्रोत कोड आसानी से प्राप्त कर सकते हैं और इसे long का उपयोग इंडेक्स डेटाटाइप के रूप में करने के लिए संशोधित कर सकते हैं - और फिर Long.MAX_VALUE तक सीमित हो सकते हैं।

+0

कारण प्रति इंडेक्स को चुनने के कारण नहीं है। इसका कारण सूची कार्यान्वयन की बैकिंग स्टोर के कारण है जिसे सूची में यादृच्छिक पहुंच की वांछित (अमूर्त) एल्गोरिदमिक जटिलता के लिए चुना गया था (जिसके लिए सरणी जैसी व्यवहार की आवश्यकता होती है)। बदले में यह बैकिंग स्टोर (एक सरणी) जावा/जेवीएम में इस सीमा के साथ आता है। हालांकि, कोई भी इंडेक्स ('int') के लिए समान डेटा प्रकार का उपयोग करके उपयोगकर्ता को 2^32 संभावित इंडेक्स देकर नकारात्मक इंटरफेस का उपयोग करने के लिए सूची इंटरफेस को कार्यान्वित कर सकता है, उदाहरण के लिए दो सरणी और कुछ अतिरिक्त ऑब्जेक्ट्स का उपयोग बैकिंग स्टोर के रूप में करना एक सरणी का। – user268396

+0

@ user268396 पर्याप्त मेला, हालांकि आप अभी भी 'ऐरेलिस्ट' के लिए स्रोत प्राप्त कर सकते हैं और अधिकतम आकार को जो भी आप चाहते हैं उसे बढ़ाने के लिए संशोधित कर सकते हैं। उदाहरण के लिए 'ऑब्जेक्ट [] []' का बैकिंग लें और इंडेक्स के रूप में 'long' का उपयोग करें - अब आप' Integer.MAX_VALUE^2' 'तक सीमित हैं। –

+0

जाहिर है, लेकिन मेरा सामान्य मुद्दा यह है कि आपके उत्तर में (जैसा कि बताया गया है) तर्क कार्यान्वयन (प्रदर्शन/एल्गोरिदमिक जटिलता) के कार्यान्वयन और व्यवहार की सीमा के बीच संबंध को याद करता है।चेहरे के मूल्य पर लिया जाने पर, एक उचित अनुवर्ती प्रश्न होगा: क्यों ArrayList का उपयोग करें? यह क्या अच्छा है कि यह सब कुछ कर सकता है 'लिंक्डलिस्ट' का एक सीमित संस्करण है। जिस पर उत्तर "एल्गोरिदमिक जटिलता/प्रदर्शन" है, लेकिन तब सीमा स्पष्ट नहीं है और न ही समझाया गया है। :) – user268396

6

ऐरेलिस्ट जो सरणी द्वारा समर्थित है, और सरणी के आकार तक सीमित है - यानी Integer.MAX_VALUE।

एक लिंक्डलिस्ट उसी तरह सीमित नहीं है, और इसमें तत्वों की कोई भी मात्रा हो सकती है।

समान प्रश्न max. length of List in Java

How many data a list can hold at the maximum सूची

+2

देखें http://stackoverflow.com/questions/7632126/maximum-size-of-hashset-vector-linkedlist –

+0

हाँ, मैं देखता हूं ...: पी से सीख लिया, धन्यवाद ...: डी –

10

ArrayList के आकार Integer.MAX_VALUE है की अधिकतम आकार पर अन्य पहलुओं के लिए देखते हैं। ऐसा नहीं है, की List#size() विधि से पहले टिप्पणियां कह रही हैं, List का अधिकतम आकार Integer.MAX_VALUE है जैसे bellow।

/** 
    * Returns the number of elements in this list. If this list contains 
    * more than <tt>Integer.MAX_VALUE</tt> elements, returns 
    * <tt>Integer.MAX_VALUE</tt>. 
    * 
    * @return the number of elements in this list 
    */ 
int size(); 

यह है, क्योंकि ArrayList आंतरिक सरणी का उपयोग करता है और सैद्धांतिक रूप से एक सरणी Integer.MAX_VALUE के आकार में अधिकतम पर हो सकता है। अधिक जानकारी के लिए, आप this देख सकते हैं।

+0

यह नहीं करता बिल्कुल सवाल का जवाब नहीं है। आकार पर जावाडॉक सिर्फ सूची के आकार की रिपोर्टिंग पर सीमा बताता है, यह सूची के अधिकतम आकार के बारे में * कुछ नहीं * कहता है। – SimonC

+0

उत्तर पूरी तरह से भ्रामक है, 'आकार() 'जावाडॉक किसी भी सूची कार्यान्वयन के अधिकतम आकार के लिए कोई संकेत नहीं देता है। – SimonC