2011-06-07 11 views
8

मैं कुछ पर स्पष्ट होना चाहता हूं: किसी सरणीसूची का उपयोग करते समय, यह 10 तत्वों के आकार से शुरू होता है। यदि इसे स्वतः बढ़ने की आवश्यकता है, तो यह पूरे सरणीसूची को 2/3 बड़ा होने के लिए फिर से लिखता है।ऐरेलिस्ट क्षमता और आकार

  1. यह आकार 150 सही बंद बना सकते हैं और अप्रयुक्त स्थान के बहुत सारे है
  2. सूची अनुमति देते हैं:

    मैं एक सूची के अंत में आकार 50-120 हो जाएगा कि कम से देख रहा हूँ, तो यह बेहतर है कुछ बार ऑटो-वृद्धि करने के लिए?

धन्यवाद

+2

जब तक आप अपना कोड प्रोफाइल नहीं करते हैं और यह वास्तव में एक बाधा है, तो मुझे प्रारंभिक आकार निर्दिष्ट करने की परवाह नहीं है। वे संख्याएं बहुत छोटी हैं। – gpeche

उत्तर

10

आप ArrayList की संभावना अंतिम आकार जानते हैं तो उसे यह अग्रिम निर्दिष्ट करने के लिए आमतौर पर सबसे अच्छा है:

ArrayList myList = new ArrayList(150); 

यह आपको ArrayList फिर से आवंटित होने के प्रदर्शन प्रभाव की बचत होती है सरणी अपनी सामग्री को स्टोर करने के लिए प्रयोग की जाती है (हालांकि, आपके द्वारा निर्दिष्ट सरणी आकार के लिए, यह प्रभाव नगण्य होगा)।

+0

लेकिन संभवतः अंतिम आकार * नहीं * वास्तव में यहां जाना जाता है। उदाहरण के लिए विचार करें कि 9 0% मामलों में केवल 50 तत्वों की आवश्यकता होगी, और केवल 5% के लिए 120 की आवश्यकता होगी। –

+0

सही है, लेकिन वास्तविक डेटा के बिना अनुकूलन हमेशा अनुमान लगाया जाता है, यही कारण है कि आमतौर पर इसकी अनुशंसा नहीं की जाती है। –

1

उसे पुनः लिखता पूरे ArrayList 2/3 बड़ा

नहीं, ये सरणी दो बार के रूप में बड़े (हालांकि सटीक कारक एक गैर-दस्तावेजी कार्यान्वयन विस्तार है) बनाता है किया जाना है। मैं सही खड़ा हूँ। 1. आकार 150 सही

क्यों 150 बंद इसे बनाने:

मैं एक सूची के अंत में आकार 50-120 हो जाएगा कि कम से देख रहा हूँ, तो यह बेहतर करने के लिए है? 120 क्यों नहीं?

  1. सूची जा ऑटो वृद्धि हुई करने के लिए कुछ समय की अनुमति दें?

ऐसी छोटी सी श्रृंखला में मैं तुरंत बड़े आकार का उपयोग करूंगा। यदि अवधि बहुत बड़ी थी (उदाहरण के लिए 50-50000) मैं छोटे आकार (या शायद एक मध्यवर्ती आकार, अपेक्षित मूल्य वितरण के आधार पर) आरक्षित करता हूं और इसे कुछ बार आकार देने देता हूं।

+1

क्या आप अपने पहले बिंदु के बारे में निश्चित हैं? (मेरे पास स्रोत आसान नहीं है) – jjnguy

+0

@jjnguy यह निर्दिष्ट नहीं है लेकिन यह सामान्य कार्यान्वयन है। - ** संपादित करें ** और मैं गलत था। –

+0

* विकास नीति का विवरण इस तथ्य से परे निर्दिष्ट नहीं है कि तत्व जोड़ने के लिए निरंतर अमूर्त समय लागत होती है। * - 1.6 एपीआई – alexcoco

1

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

1

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

2

हां, ऑटो आकार के कारण हाथ से पहले आकार निर्दिष्ट करना बेहतर है। ArrayList जितना बड़ा होगा उतना ही इसे आकार बदलना होगा।

4

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

1

आप गुवा Lists.newArrayListWithExpectedSize से अच्छी विधि का भी उपयोग कर सकते हैं।

यहाँ जावाडोक

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

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