Nein. Es ist nicht erlaubt Lücken zwischen den Elementen zu erzeugen. Das Hinzufügen eines Elements bei Index 5 im obigen Programm würde einen Laufzeitfehler erzeugen.
Um ein Element aus einer Liste zu entfernen, verwenden wir die Methode remove()
. Mit dieser Methode wird ein Element entfernt, ohne eine Lücke zu hinterlassen. Die Objektreferenzen oberhalb des entfernten Elements werden nach unten verschoben, um die Lücke zu füllen.
E remove(int index)
index
.index
wird nach
unten verschoben, so dass sein Index um eins kleiner ist als sein vorheriger Wert.IndexOutOfBoundsException
aus, wenn der Index außerhalb des Bereichs liegt.
Die Objektreferenz an der Position index
wird aus der Liste entfernt. Die Elemente an den Stellen index+1
, index+2
, ... , size()-1
werden jeweils um eins nach unten verschoben, um die Lücke zu schließen. Dies ist so, als würde man ein Buch aus der Mitte eines Stapels von Büchern herausziehen.
Die Objektreferenz, die aus der Liste entfernt wurde, ist der Rückgabewert der Methode. Dieser Wert kann einer Referenzvariablen zugewiesen werden. Solange es eine Referenz auf das Objekt gibt, ist das Objekt nicht verloren. Wenn die einzige Referenz auf das Objekt diejenige in der Liste war und diese Referenz nicht einer Variablen zugewiesen wird, wird das Objekt vom Speicherbereinigungsdienst (Garbage Collector) gelöscht werden.
Wir prüfen das folgende Programm. Was wird es ausgeben?
import java.util.* ;
public class DeleteEg
{
public static void main(String[] args)
{
ArrayList<String> names = new ArrayList<>();
names.add( "Amy" );
names.add( "Bob" );
names.add( "Chris" );
names.add( "Deb" );
names.remove(2);
for (int j=0; j < names.size(); j++)
System.out.println(
j + ": " + names.elementAt(j));
}
}