2011-12-15 9 views
13

मैं ऐरेलिस्ट से विशिष्ट ऑब्जेक्ट को कैसे हटा सकता हूं?जावा में ऐरेलिस्ट से विशिष्ट ऑब्जेक्ट को कैसे निकालें?

import java.util.ArrayList;  
public class ArrayTest { 
    int i; 

    public static void main(String args[]){ 
     ArrayList<ArrayTest> test=new ArrayList<ArrayTest>(); 
     ArrayTest obj; 
     obj=new ArrayTest(1); 
     test.add(obj); 
     obj=new ArrayTest(2); 
     test.add(obj); 
     obj=new ArrayTest(3); 
     test.add(obj); 
    } 
    public ArrayTest(int i){ 
     this.i=i; 
    } 
} 

मेरी ArrayList<ArrayList>

उत्तर

20

ArrayList को हटा वस्तुओं equals(Object obj) पद्धति पर आधारित से मैं new ArrayTest(1) के साथ वस्तु को हटा सकते हैं कैसे: मैं नीचे के रूप में एक वर्ग है मान लीजिए। तो आपको इस विधि को ठीक से लागू करना चाहिए। की तरह कुछ:

public boolean equals(Object obj) { 
    if (obj == null) return false; 
    if (obj == this) return true; 
    if (!(obj instanceof ArrayTest)) return false; 
    ArrayTest o = (ArrayTest) obj; 
    return o.i == this.i; 
} 
7

सामान्य तौर पर एक वस्तु एक ArrayList (या आमतौर पर किसी भी List) से दो तरह से हटाया जा सकता है, सूचकांक (remove(int)) द्वारा और वस्तु (remove(Object)) द्वारा।

इस विशेष परिदृश्य में: equals(Object) विधि को ArrayTest कक्षा में जोड़ें। यह सही ऑब्जेक्ट की पहचान करने के लिए ArrayList.remove(Object) की अनुमति देगा।

0
ArrayTest obj=new ArrayTest(1); 
    test.add(obj); 
    ArrayTest obj1=new ArrayTest(2); 
    test.add(obj1); 
    ArrayTest obj2=new ArrayTest(3); 
    test.add(obj2); 

    test.remove(object of ArrayTest); 

आप निर्दिष्ट कर सकते हैं कि आप प्रत्येक ऑब्जेक्ट को कैसे नियंत्रित करते हैं।

+0

लेकिन अगर मैं अनियमित स्थिति में अनियमित हूं तो मैं ArrayTest की वस्तु को पिछले ......... – sanu

0

उपयोग इस कोड

test.remove(test.indexOf(obj)); 

test is your ArrayList and obj is the Object, first you find the index of obj in ArrayList and then you remove it from the ArrayList. 
+0

पर कैसे प्राप्त कर सकता हूं, तो मैं obj की अनुक्रमणिका कैसे प्राप्त कर सकता हूं। – sanu

+0

अगर मुझे आपकी बात समझ में नहीं आती तो मुझे माफ़ कर दो। लेकिन आपको इंडेक्स प्रदान करने की आवश्यकता नहीं है, आपको ऑब्जेक्ट को इंडेक्स पर पास करने की आवश्यकता है और यह ऑब्जेक्ट इंडेक्स वापस कर देगा और विधि को हटाने से इस इंडेक्स को ऐरेलिस्ट से हटा दिया जाएगा। यदि आपके पास समान मूल्य वाले डुप्लिकेट ऑब्जेक्ट हैं तो आपको अपनी कक्षा में बराबर विधि लागू करने की आवश्यकता है। –

+0

लेकिन इस मामले में indexOf (obj) पिछले वस्तु ArrayTest है कि के सूचकांक मूल्य बनाए रखने के (3) ..... तो यह पिछले वस्तु – sanu

0

AValchev सही है। एक त्वरित समाधान सभी तत्वों को पार्स करना और एक अद्वितीय संपत्ति से तुलना करना होगा।

String property = "property to delete"; 

for(int j = 0; j < i.size(); j++) 
{ 
    Student obj = i.get(j); 

    if(obj.getProperty().equals(property)){ 
     //found, delete. 
     i.remove(j); 
     break; 
    } 

} 

यह एक त्वरित समाधान है। आप बड़ी परियोजनाओं के लिए ऑब्जेक्ट तुलना बेहतर ढंग से कार्यान्वित करेंगे।

+0

क्या होगा यदि आप संपत्ति से मेल खाने वाली कई ऑब्जेक्ट्स को हटाना चाहते हैं? – tmh

0

आप तत्व ढूंढने के लिए Collections.binarySearch का उपयोग कर सकते हैं, फिर लौटाए गए इंडेक्स पर कॉल को कॉल करें। http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#binarySearch%28java.util.List,%20java.lang.Object%29

यह हालांकि कार्यान्वित .equals के लिए ArrayTest वस्तु की आवश्यकता होगी:

Collections.binarySearch यहाँ के दस्तावेज़ देखें। सूची को क्रमबद्ध करने के लिए आपको Collections.sort को भी कॉल करने की आवश्यकता होगी। अंत में, ऐरेटेस्ट को तुलनात्मक इंटरफ़ेस को कार्यान्वित करना होगा, ताकि बाइनरी खोज सही ढंग से चल सके।

यह जावा में ऐसा करने का "उचित" तरीका है। यदि आप केवल त्वरित और गंदे फैशन में समस्या को हल करने के लिए देख रहे हैं, तो आप तत्वों को फिर से सक्रिय कर सकते हैं और उस विशेषता को हटा सकते हैं जिसे आप ढूंढ रहे हैं।

0

यह मैं मदद की:

 card temperaryCardFour = theDeck.get(theDeck.size() - 1); 
     theDeck.remove(temperaryCardFour);  

बजाय

theDeck.remove(numberNeededRemoved); 

मैं कोड के पहले टुकड़ा और दूसरे पर एक संयुक्त राष्ट्र को हटाने रचना पर एक हटाने रचना मिला है।

अपने कोड को पहले स्निपेट के साथ स्विच करने का प्रयास करें, मुझे लगता है कि यह आपकी समस्या है।

नाथन नेल्सन

0

ArrayList से विशेष वस्तु को दूर करने के लिए वहाँ दो तरीके हैं। सरणी सूची के फ़ंक्शन को कॉल करें।

  1. ऑब्जेक्ट के आधार पर हटा रहा है।
arrayList.remove(object); 

यह आपके वस्तु लेकिन ज्यादातर मामलों में हट जाएगा ArrayList UserDefined डेटाटाइप्स की चीज़ें होती हैं, इस प्रक्रिया में सही परिणाम नहीं देता है। यह केवल Primitive DataTypes के लिए ठीक काम करता है। चूंकि उपयोगकर्ता वस्तु फ़ील्ड मान के आधार पर आइटम को हटाना चाहता है और इसकी तुलना स्वचालित रूप से निकालें फ़ंक्शन द्वारा नहीं की जा सकती है।

  1. सरणी सूची की निर्दिष्ट अनुक्रमणिका स्थिति के आधार पर हटा रहा है। सरणी से किसी आइटम या वस्तु को हटाने का सबसे अच्छा तरीका। सबसे पहले, उस आइटम की अनुक्रमणिका ढूंढें जिसे आप निकालना चाहते हैं। फिर इस सरणी विधि को कॉल करें, यह विधि आइटम को इंडेक्स आधार पर हटा देती है। और यह सही परिणाम देगा।
arrayList.remove(index); 
0

आप जावा 8 का उपयोग कर रहे हैं:

test.removeIf(t -> t.i == 1); 

जावा 8 संग्रह इंटरफ़ेस में एक removeIf विधि है। ArrayList के लिए, यह एक उन्नत कार्यान्वयन (एन का आदेश) है।