मेरे पास स्ट्रिंग सरणी ( String[]) है और मुझे पहले आइटम को हटाने की आवश्यकता है। मैं इसे कुशलता से कैसे कर सकता हूं?
मेरे पास स्ट्रिंग सरणी ( String[]) है और मुझे पहले आइटम को हटाने की आवश्यकता है। मैं इसे कुशलता से कैसे कर सकता हूं?
जवाबों:
जावा में सरणियों का आकार नहीं बदला जा सकता है। इसलिए, तकनीकी रूप से आप किसी भी तत्व को सरणी से नहीं निकाल सकते।
सरणी से किसी तत्व को हटाने का अनुकरण करने का एक तरीका यह है कि एक नया, छोटा सरणी बनाएं, और फिर मूल सरणी से नए, छोटे सरणी में सभी तत्वों की प्रतिलिपि बनाएँ।
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
हालाँकि , मैं उपरोक्त विधि का सुझाव नहीं दूंगा। आपको वास्तव में ए का उपयोग करना चाहिए List<String>। सूचियाँ आपको किसी भी सूचकांक से आइटम जोड़ने और हटाने की अनुमति देती हैं। यह निम्नलिखित के समान होगा:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
ArrayListओ (एन) के पहले तत्व को हटाना ।
ArrayList, लेकिन इसके लिए नहीं LinkedList।
Arrays.copyOfRange()API9 + के लिए है
सबसे सरल तरीका संभवतः इस प्रकार है - आपको मूल रूप से एक नया सरणी बनाने की आवश्यकता है जो एक तत्व छोटा है, फिर उन तत्वों की प्रतिलिपि बनाएँ जिन्हें आप सही स्थिति में रखना चाहते हैं।
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
ध्यान दें कि यदि आप अपने आप को इस तरह के ऑपरेशन को अक्सर करते हुए पाते हैं, तो यह एक संकेत हो सकता है कि आपको वास्तव में एक अलग प्रकार की डेटा संरचना का उपयोग करना चाहिए, जैसे कि एक लिंक की गई सूची। हर बार एक नए सरणी का निर्माण एक O (n) ऑपरेशन है, जो आपके सरणी के बड़े होने पर महंगा हो सकता है। एक लिंक की गई सूची आपको पहला तत्व निकालने के लिए O (1) देगी।
एक वैकल्पिक विचार पहले आइटम को बिल्कुल भी नहीं हटाना है, लेकिन सिर्फ एक पूर्णांक बढ़ाता है जो उपयोग में आने वाले पहले सूचकांक को इंगित करता है। सरणी के उपयोगकर्ताओं को इस ऑफसेट को ध्यान में रखना होगा, लेकिन यह एक कुशल दृष्टिकोण हो सकता है। Java स्ट्रिंग क्लास वास्तव में सबस्ट्रिंग बनाते समय इस पद्धति का आंतरिक रूप से उपयोग करता है।
Arrays.copyOfRange()है।
आप इसे बिल्कुल नहीं कर सकते हैं, जल्दी से अकेले चलो। जावा में ऐरे निश्चित आकार हैं। आप कर सकते हैं दो चीजें हैं:
आप System.arraycopyइनमें से किसी एक के लिए उपयोग कर सकते हैं । ये दोनों O (n) हैं, क्योंकि वे सभी तत्व को कॉपी करते हैं।
यदि आप अक्सर पहला तत्व निकाल रहे हैं, तो LinkedListइसके बजाय उपयोग करने पर विचार करें । आप सुविधा के लिए LinkedList.remove, जो Queueइंटरफ़ेस से है, का उपयोग कर सकते हैं । LinkedListपहला तत्व निकालने के साथ , ओ (1) है। वास्तव में, किसी भी तत्व को हटाने के बाद ओ (1) एक बार जब आप ListIteratorउस स्थिति में आ जाते हैं। हालांकि, सूचकांक द्वारा एक मनमाना तत्व तक पहुंच O (n) है।
सरणी के पहले "लाइव" तत्व का एक सूचकांक रखें। पहले तत्व को हटाना (हटाने का ढोंग करना) फिर O(1)समय जटिलता ऑपरेशन बन जाता है ।
संक्षेप में, त्वरित लिंक विधि:
List<String> llist = new LinkedList<String>(Arrays.asList(oldArray));
llist.remove(0);
एक वैकल्पिक बदसूरत विधि:
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");