यदि मैं किसी सरणीसूची से संग्रह को हटाना चाहता हूं तो उपयोग करने के लिए बेहतर क्या है? मुझे लगता है कि हटाएं इस कार्य के लिए ArrayList में सभी विधि लिखी गई है, लेकिन एक परीक्षण में मैंने लिखा है, बस वस्तुओं के माध्यम से पुनरावृत्त करना और उन्हें अलग करना कुछ सेकंड तेज था।ArrayList हटाएं बनाम हटाएं सभी
इस उद्देश्य के लिए आप क्या उपयोग कर रहे हैं?
संपादित करें:
मैं grepcode पर पाया removeAll का कोड कॉल batchRemove (ग, गलत):
निजी बूलियन अधिक ... batchRemove (संग्रह ग, बूलियन पूरक) {
700 final Object[] elementData = this.elementData;
701 int r = 0, w = 0;
702 boolean modified = false;
703 try {
704 for (; r < size; r++)
705 if (c.contains(elementData[r]) == complement)
706 elementData[w++] = elementData[r];
707 } finally {
708 // Preserve behavioral compatibility with AbstractCollection,
709 // even if c.contains() throws.
710 if (r != size) {
711 System.arraycopy(elementData, r,
712 elementData, w,
713 size - r);
714 w += size - r;
715 }
716 if (w != size) {
717 // clear to let GC do its work
718 for (int i = w; i < size; i++)
719 elementData[i] = null;
720 modCount += size - w;
721 size = w;
722 modified = true;
723 }
724 }
725 return modified;
726 }
:
मैं वास्तव में यह समझ में न ..
अपने परीक्षण कोड यह था
public class RemoveVsRemovall {
public static void main(String[] args){
ArrayList<String> source = new ArrayList<>();
ArrayList<String> toRemove = new ArrayList<>();
for(int i = 0; i < 30000; i++){
String s = String.valueOf(System.nanoTime());
source.add(s);
if(i % 2 == 0) toRemove.add(s);
}
long startTime = System.nanoTime();
removeList1(source, toRemove);
long endTime = System.nanoTime();
System.out.println("diff: " + (endTime - startTime) * 1e-9);
}
static void removeList1(ArrayList<String> source, ArrayList<String> toRemove){
source.removeAll(toRemove);
}
static void removeList2(ArrayList<String> source, ArrayList<String> toRemove){
for(String s : toRemove){
source.remove(s);
}
}
}
इसे विभिन्न सूची आकारों के साथ कुछ बार बुला रहा है और दो तरीकों से between स्विचिंग।
मुझे उम्मीद है कि आपके परीक्षण में कोई दोष था। हमें अपना टेस्ट कोड दिखाएं। (मुझे यह विश्वास करना मुश्किल लगता है कि * वास्तव में * प्रदर्शन में एक महत्वपूर्ण अंतर है। और जावा में सटीक परिणाम देने वाले बेंचमार्क लिखना कठिन है।) –
आप सभी विधियों को हटाने और निकालने के लिए कोड क्यों नहीं देखते हैं? फिर भी, यह सवाल एक डाउनवोट के लायक नहीं है। मुझसे +1 इस पर 200 + अपवॉट्स के साथ SO पर खराब प्रश्न हैं .. – CKing
@bot और क्या मैं पूछ सकता हूं कि प्रगति कहां है? – Gabe