2012-05-08 13 views
5

मेरे पास ArrayList है जिसमें User जैसे कुछ ऑब्जेक्ट हैं, और प्रत्येक ऑब्जेक्ट में name और password प्रॉपर्टी है। मैं केवल User ऑब्जेक्ट को कैसे हटा सकता हूं जिसमें इस ArrayList से विशिष्ट 'नाम' है?मैं जावा में किसी ऐरेलिस्ट से ऑब्जेक्ट को कैसे हटा सकता हूं?

+3

क्या आप अपने प्रश्न का अधिक सटीक वर्णन कर सकते हैं? जिस कोड पर आप काम कर रहे हैं उसका एक स्निपेट लिखें ... – aleroot

उत्तर

1

बस उपयोगकर्ता से प्राप्त वस्तुओं के ArrayList के माध्यम से खोजें, और उस नाम के बराबर नाम के लिए परीक्षण करें जिसे आप निकालना चाहते हैं। फिर सूची से उस वस्तु को हटा दें।

+0

एक उम्मीद है कि ऑप्टिमाइज़ेशन किए जा सकते हैं, अन्यथा ओपी ओ (एन) कार्यान्वयन के साथ फंस गया है। –

+1

@ एक्स-ज़ीरो किस परिदृश्य में आप नहीं जानते कि एक वस्तु सूची में कहां है, क्या आप 'ओ (एन)' से बेहतर हो सकते हैं? –

+2

@ एक्स-शून्य: यदि सभी ओपी में एक सरणी सूची है, तो 'ओ (एन)' वह सबसे अच्छा है जिसके लिए वह उम्मीद कर सकता है (अकेले तत्व हटाने 'ओ (एन) ') है। – NPE

2

आप किए जा सकेंगे: पुनरावर्तक के साथ सूची पर

  • पाश
  • जांच कर लें कि आपके सूची में प्रत्येक आइटम सही उपयोगकर्ता (नाम की जाँच)
  • अगर यह होता है है, निकालें विधि का उपयोग इटेटरेटर का।
21
Iterator<User> it = list.iterator(); 
while (it.hasNext()) { 
    User user = it.next(); 
    if (user.getName().equals("John Doe")) { 
    it.remove(); 
    } 
} 
+9

ओपी की तरह ऐसा नहीं लगता है कि इस प्रश्न के लिए कोई काम है, आपको उन्हें मुफ्त में कोड नहीं देना चाहिए। –

+0

सूची का प्रतिनिधित्व क्या होता है ????? –

+1

हां हां मुझे मिल गया ... धन्यवाद –

0

आपका कोड इस प्रकार दिखाई देंगे:

List<User> users = new ArrayList<User>(); 

public void removeUser(String name){ 
    for(User user:users){ 
     if(user.name.equals(name)){ 
      users.remove(user); 
     } 
    } 
} 
+2

आपको लूप के भीतर निकालने के लिए एक इटरेटर का उपयोग करना चाहिए या आपको एक समवर्ती मोडिफिकेशन अपवाद प्राप्त होगा। – assylias

+0

@assylias ऐप और अन्य संग्रहों पर अधिक सुविधाजनक बनाने के लिए जावा 5 में लूप के लिए मूल बढ़ाया गया था। और प्रत्येक लूप प्रत्यारोपण के लिए इटरेटर –

+1

का उपयोग इस कोड को चलाने का प्रयास करें (प्रारूपण के लिए खेद है): 'सूची सूची = नई ArrayList (); list.add ("a"); (स्ट्रिंग एस: सूची) के लिए { list.remove (ओं); } 'और आपको अपवाद प्राप्त करना चाहिए। – assylias

4

एक और सोचा: उपयोगकर्ता वर्ग विशिष्ट उपयोगकर्ता नाम से परिभाषित किया जा सकता है, और यदि आप ओवरराइड की तरह कुछ के साथ बराबर है:

सार्वजनिक बूलियन बराबर (वस्तु arg0) {

return this.name.equals(((user) arg0).name); 
} 

आप सूची के माध्यम से बिना उपयोगकर्ता को हटा सकते हैं। तुम सिर्फ कर सकते हैं:

list.remove (नया उपयोगकर्ता ("जॉन डो"))

5

आप शायद List से वस्तु को दूर करने का प्रयास करते हुए ConcurrentModificationException के साथ सामना कर रहे हैं। इस अपवाद के लिए एक स्पष्टीकरण यह है कि ArrayList का पुनरावर्तक एक असफल-तेज़ इटरेटर है। उदाहरण के लिए, यह एक अपवाद (असफल) फेंक देगा जब यह पता चलता है कि रनटाइम में इसका संग्रह संशोधित किया गया है। इस समस्या का समाधान Iterator का उपयोग करना है।

List<User> list = new ... 

for (Iterator<User> it = list.iterator(); it.hasNext();) { 

    User user = it.next(); 
    if (user.getUserEmail().equals(currentUser.getUserEmail())) { 
     it.remove(); 
    } 
} 
4

आप कुछ इस तरह इस्तेमाल कर सकते हैं:

  arrayList.removeIf(s-> s.getName().contains("yourName")); 
+0

करने के लिए इटरेटर ऑब्जेक्ट का पता लगा सकता है 's' क्या है? कृपया अपने उत्तरों को थोड़ा और विशिष्ट बनाएं। –

+0

एस यहां अनुमानित है और यह केवल जेडीके 1.8 में काम करता है जहां लैम्ब्डा अभिव्यक्ति समर्थित है। इस संग्रह के सभी तत्वों को हटा देता है जो दिए गए भविष्य को संतुष्ट करते हैं। – jprism

2

अनुशंसित

यहाँ एक सरल उदाहरण तरीका प्रदर्शित करने वाले आप List के माध्यम से पुनरावृति और तत्व जब विशिष्ट स्थिति उत्पन्न होने पर निकाल सकते है इस समस्या को हल करने का तरीका यह है:

ArrayList<User> list = new ArrayList<User>(); 
list.add(new User("user1","password1")); 
list.add(new User("user2","password2")); 
list.add(new User("user3","password3")); 
list.add(new User("user4","password4")); 
Iterator<String> iter = list.iterator(); 
while (iter.hasNext()) 
{ 
    User user = iter.next(); 
    if(user.name.equals("user1")) 
    { 
     //Use iterator to remove this User object. 
     iter.remove(); 
    } 
} 

ऑब्जेक्ट को निकालने के लिए इटरेटर का उपयोग करना ArrayList(Object) टाइप करके हटाने से अधिक कुशल है क्योंकि यह अधिक तेज़ और 20% अधिक समय बचाने और जावा संग्रह के लिए एक मानक जावा अभ्यास है।

-1
ArrayList<User> userList=new ArrayList<>(); 
//load data 

public void removeUser(String userName){ 
    for (User user: userList){ 
     if(user.getName()equals(userName)){ 
      userList.remove(user); 
     } 
    } 
} 
+2

प्रत्येक http://stackoverflow.com/questions/223918/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-re के लिए पुनरावृत्ति करते समय हटा नहीं सकता – Gangaraju

संबंधित मुद्दे

 संबंधित मुद्दे