2 sätt att ta bort element / objekt från ArrayList i Java

det finns två sätt att ta bort objekt från ArrayList i Java, först genom att använda remove () – metoden och andra genom att använda Iterator. ArrayList tillhandahåller överbelastad remove () – metod, ett accept-index för objektet som ska tas bort, dvs ta bort(int-index) och andra accept-objekt som ska tas bort, dvs ta bort(Object obj). Tumregel är, om du känner till objektets index, använd sedan den första metoden, annars använd den andra metoden. Förresten måste du komma ihåg att använda ArrayList remove methods, bara när du inte itererar över ArrayList om du itererar, använd iterator.remove () – metoden, om du inte gör det kan det resultera i ConcurrentModificationException i Java. En annan gotcha kan ha inträffat på grund av autoboxing. Om du tittar noga på att två borttagningsmetoder, ta bort(int index) och ta bort(Object obj) är oskiljbara om du försöker ta bort från en ArrayList av heltal.
anta att du har tre objekt i ArrayList dvs och du vill ta bort det andra objektet, vilket är 2. Du kan ringa ta bort (2), som faktiskt är ett samtal för att ta bort(objekt) om överväga autoboxing, men kommer att tolkas som ett samtal för att ta bort 3rd element, genom att tolka som ta bort(index).
Jag har diskuterat detta problem tidigare i min artikel om bästa praxis att följa medan överbelastningsmetoder i Java. På grund av mindre kända breddning regel och autoboxing, dåligt överbelastad metod kan skapa en hel del tvetydighet.

kodexempel för att ta bort element från ArrayList

Låt oss testa ovanstående teori med ett enkelt kodexempel på ArrayList med heltal. Följande program har en ArrayList av heltal som innehåller 1, 2 och 3 dvs motsvarar detta exakt indexet.

pakettest;importera java.util.ArrayList; importera java.util.http://java67.blogspot.com*/Offentlig klass JavaTutorial {/***@param args kommandoradsargumenten * / public static void main(String args) { List<heltal> numbers = new ArrayList<heltal> (); siffror.Lägg till (1); siffror.Lägg till (2); siffror.Lägg till (3); systemet.ut.println ("ArrayList innehåller:" + nummer); / / ringa bort(index) nummer.ta bort (1); //Ta bort objekt vid index 1 dvs 2: A objektet, vilket är 2 //anropar ta bort(objekt) nummer.ta bort (3);}} Output:ArrayList innehåller : undantag i tråden "main" java.lang.IndexOutOfBoundsException: Index: 3, Storlek: 2 på java.util.ArrayList.rangeCheck (ArrayList.java:635) vid java.util.ArrayList.ta bort (ArrayList.java: 474) vid test.Test.Huvud (Test.java:33) Java resultat: 1

Du kan se att andra samtalet behandlas också som ta bort(index). Det bästa sättet att ta bort tvetydighet är att ta ut autoboxing och ge ett verkligt objekt, som visas nedan.

systemet.ut.println ("ArrayList Before:" + numbers);// ringa bort (index)nummer.ta bort (1); //Ta bort objekt vid index 1 dvs 2: A objektet, vilket är 2 //anropar ta bort(objekt) nummer.ta bort(nytt heltal (3)); systemet.ut.println ("ArrayList After:" + numbers);utgång :ArrayList före : ArrayList efter : 

den här gången fungerar det, men jag är rädd för lata utvecklare som jag, som tar autoboxing beviljas. Låt oss nu ta en titt på att ta bort objektet från ArrayList medan du itererar över dem. Du måste vara bekant med Iterator i Java, innan du fortsätter vidare.

ta bort objekt från ArrayList med Iterator

2 exempel för att ta bort element/objekt från ArrayList i Javadetta är faktiskt en subtil detalj av Java-programmering, inte uppenbart för första timers, eftersom kompilatorn inte kommer att klaga, även om du använder remove () – metoden från java.util.ArrayList, medan du använder Iterator. Du kommer bara att inse ditt misstag när du ser ConcurrentModificationException, som i sig är vilseledande och du kan spendera otaliga timmar på att hitta en annan tråd, som ändrar den ArrayList, på grund av samtidiga ord. Låt oss se ett exempel.

public static void main(String args) { lista<heltal> numbers = new ArrayList<heltal>(); siffror.Lägg till (101); siffror.Lägg till (200); siffror.Lägg till (301); siffror.Lägg till (400); systemet.ut.println ("ArrayList före:" + siffror); Iterator<Integer> itr = numbers.iterator(); // remove all even numbers while (itr.hasNext()) { Integer number = itr.next(); if (number % 2 == 0) { numbers.remove(number); } } System.out.println("ArrayList After : " + numbers); }Output :ArrayList Before : Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at Testing.main(Testing.java:28) 

Du kan ConcurrentModificationException, på grund av att ringa för att ta bort () metod från ArrayList. Detta är lätt i enkla exempel som detta, men i verkliga projekt, det kan vara riktigt tufft. Nu, för att åtgärda detta undantag, ersätt bara samtal med nummer.ta bort () till itr.ta bort (), detta tar bort det aktuella objektet du itererar, som visas nedan :

System.ut.println ("ArrayList före:" + siffror); Iterator<heltal> itr = siffror.iterator ();// ta bort alla jämna numbersmile (itr.hasNext ()) { heltal nummer = itr.nästa(); om (antal % 2 = = 0) {itr.ta bort ();}} systemet.ut.println ("ArrayList After:" + numbers);OutputArrayList Before : ArrayList after : 

det är allt på det här inlägget om hur man tar bort objekt från ArrayList i Java. Vi har lärt oss två sätt att ta bort ett objekt eller element från ArrayList. Förresten bör du alltid använda Ta bort (index) för att radera objekt, om du inte itererar, annars använder du alltid iterators remove () – metod för att ta bort objekt från ArrayList. Förresten ovan tips kommer att arbeta med alla index baserad lista genomförande.
vidareutbildning
Java fördjupad: Bli en komplett Java Engineer
Java Fundamentals: Samlingar
datastrukturer och algoritmer: djupdykning med Java
algoritmer och datastrukturer-Del 1 och 2
datastrukturer i Java 9 av Heinz Kabutz

Lämna ett svar

Din e-postadress kommer inte publiceras.