दिलचस्प पोस्ट
आईओएस 7 स्प्राइट किट अप फ्रीमेड मेमोरी एक WebView में एक एंड्रॉइड संसाधन लोड हो रहा है रेल के नेस्टेड फॉर्म के साथ है_मैं: माध्यम से, मॉडल में शामिल होने के गुणों को कैसे संपादित करें? iPhone / iOS JSON पार्सिंग ट्यूटोरियल Postgres से MySQL को डाटाबेस माइग्रेट करें शैल स्क्रिप्ट एन्कोडिंग और रेखा के अंत के प्रति संवेदनशील हैं? आर: कस्टम लेजेंड फॉर मल्टीपल लेयर जीगप्लोट मैं उपयोगकर्ता को अपने सी # एप्लिकेशन को बंद करने से कैसे रोक सकता हूं? निर्भरता प्रॉपर्टी गेटर / सेटर को फोन नहीं किया जा रहा है छोरों के साथ `दो 'और ब्लॉक स्कोपिंग का स्पष्टीकरण MySQL – AUTO_INCREMENT होने के लिए एक कॉलम बदलें पायथन में रिक्त ऑब्जेक्ट? कल आधी रात की जावा दिनांक ऑब्जेक्ट और आधी रात को कैसे बनाऊं? सी # विंडोज सेवा पर stdout + stderr पुनर्निर्देशित करें कोर डेटा: एक इकाई के सभी उदाहरणों को हटाने का सबसे तेज़ तरीका

एक अर्रे (जावा) से एक तत्व निकालना

जावा में एक सरणी से एक तत्व को निकालने के लिए कोई तेज़ (और अच्छी लग रही) तरीका है?

वेब के समाधान से एकत्रित समाधान "एक अर्रे (जावा) से एक तत्व निकालना"

आप कॉमन्स लैंग की अर्रे यूटिलस का इस्तेमाल कर सकते हैं

array = ArrayUtils.removeElement(array, element) 

commons.apache.org लाइब्रेरी: जवाडॉक्स

आपका प्रश्न बहुत स्पष्ट नहीं है अपने जवाब से, मैं बेहतर बता सकता हूं कि आप क्या करने की कोशिश कर रहे हैं:

 public static String[] removeElements(String[] input, String deleteMe) { List result = new LinkedList(); for(String item : input) if(!deleteMe.equals(item)) result.add(item); return result.toArray(input); } 

NB: यह untested है त्रुटि की जांच पाठक को एक कवायद के रूप में छोड़ दी जाती है (मैं अवैध तरीके से निष्कासन चाहता हूं यदि इनपुट या हटाए जाने पर मेरा शून्य है, रिक्त सूची इनपुट पर रिक्त सूची का मतलब नहीं है। नल निकालें स्ट्रिंग को सरणी से समझ में आ सकता है, यह एक अभ्यास के रूप में भी छोड़ देगी, वर्तमान में, यह एक एनपीई को फेंक देगा जब वह डिलीमेबल पर रिक्त कॉल करने की कोशिश करता है अगर deleteMe नल है।)

मैंने यहां किए गए विकल्प:

मैंने एक लिंक्डलिस्ट इस्तेमाल किया बदलाव उतना ही तेज होना चाहिए, और यदि आप बहुत सारे तत्वों को हटाना बंद कर देते हैं, तो आप किसी भी आकार के आकार से बच सकते हैं, या बहुत बड़ी सूची आवंटित कर सकते हैं आप एक ArrayList का उपयोग कर सकते हैं, और प्रारंभिक आकार इनपुट की लंबाई में सेट कर सकते हैं। यह संभवतः ज्यादा अंतर नहीं कर पाएगा।

सबसे अच्छा विकल्प संग्रह का उपयोग करना होगा, लेकिन अगर यह किसी कारण से बाहर है, तो arraycopy उपयोग arraycopy । आप इसे थोड़ा और ऑफसेट पर उसी ऐरे से कॉपी करने के लिए उपयोग कर सकते हैं।

उदाहरण के लिए:

 public void removeElement(Object[] arr, int removedIdx) { System.arraycopy(arr, removedIdx + 1, arr, removedIdx, arr.length - 1 - removedIdx); } 

टिप्पणी के जवाब में संपादित करें:

यह एक और अच्छा तरीका नहीं है, यह वाकई एकमात्र स्वीकार्य तरीका है।

संग्रह को आवंटित करने के लिए (एक नया सरणी बनाता है), फिर एक तत्व हटाएं (जो संग्रह ऐरेरेकपी का उपयोग करेगा), फिर हर एन्ट्री पर एरे को कॉल करें (प्रत्येक दूसरे ऐरे बनाता है) उस बिंदु पर लाया जाता है जहां यह एक अनुकूलन मुद्दा नहीं है , यह आपराधिक बुरा प्रोग्रामिंग है

मान लीजिए कि आपके पास एक सरणी है, कहते हैं, 100 एमएम मेढ़े। अब आप इसे फिर से करना चाहते हैं और 20 तत्व हटाना चाहते हैं।

कोशिश करो…

मुझे पता है कि आपको लगता है कि यह बड़ा नहीं होगा, या यदि आप इसे हटा रहे थे, तो कई बार आप कोड को अलग तरीके से बदल लेंगे, लेकिन मैंने एक भयानक बहुत सारे कोड को तय किया है, जहां किसी ने इस तरह की धारणाएं बनायीं।

आप मूल जावा सरणी से कोई तत्व नहीं निकाल सकते इसके बजाय विभिन्न कलेक्शंस और ऐरेएलिस्ट पर एक नज़र डालें।

अच्छा लग समाधान पहले स्थान पर सरणी के बजाय एक सूची का उपयोग करना होगा।

 List.remove(index) 

यदि आपको सरणियों का उपयोग करना है, तो System.arraycopy को दो कॉल्स। System.arraycopy सबसे तेज़ी से सबसे तेज हो जाएगा।

 Foo[] result = new Foo[source.length - 1]; System.arraycopy(source, 0, result, 0, index); if (source.length != index) { System.arraycopy(source, index + 1, result, index, source.length - index - 1); } 

( Arrays.asList भी सरणियों के साथ काम करने के लिए एक अच्छा उम्मीदवार है, लेकिन इसे remove का समर्थन नहीं लगता है।)

मुझे लगता है कि प्रश्न संग्रह एपीआई के उपयोग के बिना समाधान के लिए पूछ रहा था। एक या तो निम्न स्तर के विवरणों के लिए एरे का उपयोग करता है, जहां प्रदर्शन के मामलों, या ढीला युग्मित एसओए एकीकरण के लिए। बाद में, उन्हें कलेक्शंस में परिवर्तित करना और उनको व्यावसायिक तर्क के रूप में देना ठीक है।

निम्न स्तर प्रदर्शन सामग्री के लिए, यह आमतौर पर लूप के द्वारा त्वरित और गंदे अनिवार्य राज्य-मुंह द्वारा पहले से ही अस्पष्ट है, आदि। उस मामले में संग्रहण और एरे के बीच आगे और पीछे परिवर्तित करना बोझिल, अपठनीय और यहां तक ​​कि संसाधन गहन भी है।

वैसे, टॉपकोडर, कोई भी? हमेशा उन सरणी मापदंडों! अरीना में होने पर उन्हें तैयार करने के लिए तैयार रहें।

नीचे समस्या की मेरी व्याख्या है, और एक समाधान यह विधेयक के और जेलोवर्ट द्वारा दिए गए दोनों कार्यों से भिन्न है । साथ ही, यह संवेदक रूप से मामला संभालता है जब तत्व सरणी में नहीं होता है।

उम्मीद है की वो मदद करदे!

 public char[] remove(char[] symbols, char c) { for (int i = 0; i < symbols.length; i++) { if (symbols[i] == c) { char[] copy = new char[symbols.length-1]; System.arraycopy(symbols, 0, copy, 0, i); System.arraycopy(symbols, i+1, copy, i, symbols.length-i-1); return copy; } } return symbols; } 

आप इसे "अच्छे लग रहे मार्ग" में हटाने के लिए ArrayUtils API का उपयोग कर सकते हैं यह एरे पर कई ऑपरेशन (निकालें, ढूंढें, जोड़, शामिल, आदि) लागू करता है।
जरा देखो तो। यह मेरे जीवन को सरल बना दिया है।

आप किसी सरणी की लंबाई नहीं बदल सकते हैं, लेकिन आप नए मूल्यों की प्रतिलिपि बनाते हुए इंडेक्स को बनाए रखने वाले मानों को बदल सकते हैं और उन्हें मौजूदा इंडेक्स नंबर पर रख सकते हैं। 1 = माइक, 2 = जेफ // 10 = जॉर्ज 11 1 को ओवरराइट करने वाला माइक

  Object[] array = new Object[10]; int count=-1; public void myFunction(String string) { count++; if(count == array.length) { count = 0; // overwrite first } array[count] = string; } 

बिल के और डैडिन्न द्वारा लिखित लोगों के लिए कुछ और पूर्व शर्तें भी आवश्यक हैं

  Object[] newArray = new Object[src.length - 1]; if (i > 0){ System.arraycopy(src, 0, newArray, 0, i); } if (newArray.length > i){ System.arraycopy(src, i + 1, newArray, i, newArray.length - i); } return newArray; 

ठीक है, बहुत कुछ thx अब मैं इस तरह sth का उपयोग करें:

 public static String[] removeElements(String[] input, String deleteMe) { if (input != null) { List<String> list = new ArrayList<String>(Arrays.asList(input)); for (int i = 0; i < list.size(); i++) { if (list.get(i).equals(deleteMe)) { list.remove(i); } } return list.toArray(new String[0]); } else { return new String[0]; } } 

तत्व को हटाए जाने के बिना, अपने मूल सरणी को एक और सरणी में कॉपी करें।

ऐसा करने का एक सरल तरीका है कि एक सूची, सेट … का उपयोग करें और निकालें () विधि का उपयोग करें।

आइटम को अंतिम आइटम से निकालने के लिए स्वैप करें, अगर सरणी का आकार बदलना कोई रुचि नहीं है।

मुझे आशा है कि आप जावा संग्रह / जावा कॉमन्स संग्रह का उपयोग करें!

एक java.util.ArrayList के साथ आप निम्न की तरह काम कर सकते हैं:

 yourArrayList.remove(someObject); yourArrayList.add(someObject); 

एक ArrayList उपयोग करें:

 alist.remove(1); //removes the element at position 1 

ज़रूर, एक और सरणी बनाएं 🙂