2012-04-21 18 views
13

कैसे बढ़ाएं मेरे पास एक त्वरित प्रश्न है। मेरे पास जावा में एक पूर्णांक सरणी है जिसे कक्षा में अपनी लंबाई की आवश्यकता होती है। विशेष रूप से, मुझे कुछ स्थितियों में से एक को बढ़ाने की आवश्यकता है। मैंने इस तरह कोशिश की।सरणी की लंबाई

 sbgHeadX = new int[ numberOfSBG ]; 

मैं जब मैं करने के लिए आवश्यक पूर्णांक चर numberOfSBG में वृद्धि होगी, लेकिन मुझे नहीं लगता यह काम करता है है। क्या कोई और तरीका है?

+0

क्या आप उचित अधिकतम प्रदान कर सकते हैं। जाहिर है कि आपकी सरणी Integer.MAX_VALUE से कभी भी बड़ी नहीं हो सकती है, लेकिन यदि आप जानते हैं कि आपकी सरणी 300 से भी बड़ी नहीं हो सकती है तो आप इसकी लंबाई 300 तक सेट कर सकते हैं। – emory

+0

@emory - व्यक्तिगत रूप से, मैं एक मजबूत होने के लिए ऐसा करने पर विचार करता कोड गंध: परिणाम एक सरणी है, जिनमें से कुछ तत्व "उपयोग नहीं किया जाना चाहिए" हैं। यह एक त्रुटि-प्रवण और बेकार कोडिंग शैली है, जो वैध तत्वों की संख्या के साथ एक अलग चर के चारों ओर गुजरने की आवश्यकता है। यह भी धारणा तोड़ती है कि '.ize()' के साथ काम करने के लिए तत्वों की संख्या पैदा करता है। – ToolmakerSteve

उत्तर

13

का उपयोग कर मैं आपको एक ArrayList का उपयोग के रूप में आप लंबाई बारे में चिंता करने की ज़रूरत नहीं होगी सुझाव है। एक बार बनाया गया, आप एक सरणी आकार को संशोधित नहीं कर सकते:

एक सरणी एक कंटेनर ऑब्जेक्ट है जिसमें एक प्रकार के मानों की निश्चित संख्या होती है। सरणी बनने पर सरणी की लंबाई स्थापित की जाती है। निर्माण के बाद, इसकी लंबाई तय की गई है।

(Source)

+0

मैं सरणी सूची की एक विशिष्ट अनुक्रमणिका कैसे प्राप्त करूं? – kullalok

+1

@ user1276078 'yourArraylist.get (2)' 'yourClassicArray [2]' – talnicolas

+1

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

1

परिभाषा के अनुसार सरणी निश्चित आकार हैं। आप इसके बजाय एक Arraylist का उपयोग कर सकते हैं, यह एक "गतिशील आकार" सरणी है। असल में क्या होता है कि VM "ArrayList द्वारा प्रकट सरणी के आकार को समायोजित करें" *।

See also

* वापस कॉपी सरणियों

+3

* "वास्तव में क्या होता है कि वीएम सरणी सूची द्वारा प्रकट सरणी के आकार को समायोजित करता है।" *। गलत। वास्तव में, 'ArrayList' के लिए कोड एक नई बैकिंग सरणी बनाता है और मौजूदा की सामग्री की प्रतिलिपि बनाता है। ऐरे की लंबाई को बदला नहीं जा सकता ... यहां तक ​​कि जेवीएम द्वारा भी। यह जावा भाषा विशिष्टता का उल्लंघन होगा। –

+1

@StephenC आप सही हैं। समझाते समय एमआई गलती। –

+0

आप अभी भी केवल आधा अधिकार हैं। यह समायोजन बनाने वाला जेवीएम नहीं है। 'ArrayList' वर्ग सामान्य जावा कोड में ... करता है। और सरणी सरणी सूची द्वारा प्रकट नहीं की गई है ... यह एक निजी वस्तु है जो सरणी सूची द्वारा छिपा हुआ है। –

18

आप नहीं चाहते या ArrayList उपयोग नहीं कर सकते हैं, तो एक उपयोगिता विधि है:

Arrays.copyOf() 

जबकि संरक्षण, आप नया आकार निर्दिष्ट करने की अनुमति देगा तत्वों।

+2

"यह एल्गोरिदम कई डेटा सेटों पर एन * लॉग (एन) प्रदर्शन प्रदान करता है जो अन्य क्विकॉर्ट्स को वर्गबद्ध प्रदर्शन में गिरावट का कारण बनता है।" –

21

जावा में Arrays निश्चित आकार के हैं जो घोषित किए जाने पर निर्दिष्ट हैं। सरणी के आकार को बढ़ाने के लिए आपको एक बड़े आकार के साथ एक नया सरणी बनाना है और सभी पुराने मानों को नई सरणी में कॉपी करना है।

पूर्व:

char[] copyFrom = { 'a', 'b', 'c', 'd', 'e' }; 
char[] copyTo = new char[7]; 

System.out.println(Arrays.toString(copyFrom)); 
System.arraycopy(copyFrom, 0, copyTo, 0, copyFrom.length); 
System.out.println(Arrays.toString(copyTo)); 

वैकल्पिक रूप से आप एक सूची की तरह एक गतिशील डेटा संरचना इस्तेमाल कर सकते हैं।

+2

आईएमएचओ, 'Arrays.copyOf()' का उपयोग करते हुए, जैसा कि जैकब के उत्तर में, छोटा, अधिक पठनीय, कोड देगा। – ToolmakerSteve

0
Item[] newItemList = new Item[itemList.length+1]; 
    //for loop to go thorough the list one by one 
    for(int i=0; i< itemList.length;i++){ 
     //value is stored here in the new list from the old one 
     newItemList[i]=itemList[i]; 
    } 
    //all the values of the itemLists are stored in a bigger array named newItemList 
    itemList=newItemList; 
0

आप ऐरेलिस्ट का उपयोग कर सकते हैं। ऐरे के आकार की निश्चित संख्या है।

यह Example यहां आपकी मदद कर सकता है। उदाहरण इसके आउटपुट के साथ बहुत आसान है।

 
Output: 
2 5 1 23 14 
New length: 20
Element at Index 5:29
List size: 6
Removing element at index 2: 1
2 5 23 14 29
संबंधित मुद्दे