यहाँ बहुत सारे उत्तर हैं - जैसा कि मैंने देखा कि समस्या यह है कि आपने यह नहीं कहा कि आप एक संग्रह के बजाय एक सरणी का उपयोग क्यों कर रहे हैं, इसलिए मुझे कुछ कारण बताएं और कौन से समाधान लागू होंगे (अधिकांश समाधान) यहाँ पहले से ही अन्य सवालों के जवाब दिए गए हैं, इसलिए मैं बहुत विस्तार में नहीं जाऊंगा):
कारण: आपको पता नहीं था कि संग्रह पैकेज मौजूद था या उस पर भरोसा नहीं था
समाधान: एक संग्रह का उपयोग करें।
यदि आप बीच से जोड़ने / हटाने की योजना बनाते हैं, तो एक लिंक्डलिस्ट का उपयोग करें। यदि आप वास्तव में आकार के बारे में चिंतित हैं या संग्रह के मध्य में अक्सर इंडेक्स करते हैं तो एक ArrayList का उपयोग करें। इन दोनों को ऑपरेशन हटाना चाहिए।
कारण: आप आकार के बारे में चिंतित हैं या स्मृति आवंटन पर नियंत्रण चाहते हैं
समाधान: एक विशिष्ट प्रारंभिक आकार के साथ एक ArrayList का उपयोग करें।
एक ArrayList केवल एक सरणी है जो स्वयं का विस्तार कर सकती है, लेकिन इसे हमेशा ऐसा करने की आवश्यकता नहीं है। यह आइटम जोड़ने / हटाने के बारे में बहुत स्मार्ट होगा, लेकिन फिर से यदि आप बीच से एक बहुत कुछ सम्मिलित / निकाल रहे हैं, तो एक LinkList का उपयोग करें।
कारण: आपके पास एक सरणी आ रही है और एक सरणी बाहर जा रही है - इसलिए आप एक सरणी पर काम करना चाहते हैं
समाधान: इसे एक ArrayList में कनवर्ट करें, आइटम हटाएं और इसे वापस कन्वर्ट करें
कारण: आपको लगता है कि यदि आप इसे स्वयं करते हैं तो आप बेहतर कोड लिख सकते हैं
समाधान: आप एक ऐरे या लिंक्ड सूची का उपयोग नहीं कर सकते।
कारण: यह एक क्लास असाइनमेंट है और आपको अनुमति नहीं है या आपके पास किसी कारण से संग्रह एपिस तक पहुंच नहीं है
धारणा: आपको सही "आकार" के लिए नए सरणी की आवश्यकता है
समाधान: आइटम मिलान के लिए सरणी स्कैन करें और उन्हें गिनें। सही आकार का एक नया सरणी बनाएं (मूल आकार - मैचों की संख्या)। System.arraycopy का उपयोग बार-बार उन वस्तुओं के प्रत्येक समूह को कॉपी करने के लिए करें जिन्हें आप अपने नए Array में बनाए रखना चाहते हैं। यदि यह एक क्लास असाइनमेंट है और आप System.arraycopy का उपयोग नहीं कर सकते हैं, तो बस उन्हें एक बार एक लूप में हाथ से कॉपी करें लेकिन कभी भी उत्पादन कोड में ऐसा न करें क्योंकि यह बहुत धीमा है। (ये समाधान दोनों अन्य उत्तरों में विस्तृत हैं)
कारण: आपको नंगे धातु चलाने की आवश्यकता है
धारणा: आप अनावश्यक रूप से स्थान आवंटित नहीं करते हैं या बहुत लंबा समय नहीं लेते हैं
धारणा: आप सरणी (लंबाई) में उपयोग किए गए आकार को अलग-अलग ट्रैक कर रहे हैं क्योंकि अन्यथा आपको हटाए जाने या आवेषण के लिए अपने सरणी को पुनः लोड करना होगा।
आप ऐसा क्यों करना चाहते हैं इसका एक उदाहरण: आदिमों का एक एकल सरणी (मान मान लीजिए) आपके राम का एक महत्वपूर्ण हिस्सा ले रहा है - जैसे 50%! एक ArrayList इन्टर्गर ऑब्जेक्ट्स की ओर इशारा करता है जो मेमोरी की मात्रा का कुछ गुना उपयोग करेगा।
समाधान: अपने एरे पर फेरबदल करें और जब भी आपको हटाने के लिए कोई तत्व मिले (चलो इसे तत्व n कहते हैं), "डिलीट" एलिमेंट के एरे की पूंछ को कॉपी करने के लिए System.arraycopy का उपयोग करें (स्रोत और गंतव्य समान एरे हैं) - यह स्मार्ट कॉपी को सही दिशा में करने के लिए पर्याप्त है ताकि मेमोरी स्वयं को अधिलेखित न करे:
System.arraycopy (एरी, एन + 1, एरी, एन, लंबाई-एन)
length--;
यदि आप एक बार में एक से अधिक तत्वों को हटा रहे हैं, तो आप शायद इससे अधिक स्मार्ट बनना चाहेंगे। आप केवल एक "मैच" और पूरी पूंछ के बजाय अगले के बीच के क्षेत्र को स्थानांतरित करेंगे और हमेशा की तरह, किसी भी चंक को दो बार स्थानांतरित करने से बचें।
इस अंतिम स्थिति में, आपको पूरी तरह से स्वयं कार्य करना होगा, और System.arraycopy का उपयोग करना वास्तव में इसे करने का एकमात्र तरीका है क्योंकि यह आपके कंप्यूटर आर्किटेक्चर के लिए मेमोरी को स्थानांतरित करने का सबसे अच्छा तरीका चुनने जा रहा है - यह कई गुना तेज होना चाहिए किसी भी कोड से आप यथोचित अपने आप को लिख सकते हैं।