Elemente aus Liste entfernen und hinzufügen

Eichelhäer

Bekanntes Mitglied
Hallo,

Hi,

kurze Frage, wenn man ein Objekt an einer beliebigen Stelle zur Laufzeit entnimmt, muss man da die Liste nochmals sortieren, oder wird das "Loch" automatisch wieder aufgefüllt?
 
kurze Frage, wenn man ein Objekt an einer beliebigen Stelle zur Laufzeit entnimmt, muss man da die Liste nochmals sortieren, oder wird das "Loch" automatisch wieder aufgefüllt?
Wenn Du eine Listen Implementation hast, dann gibt es kein "Loch", Es gibt das Element dann einfach nicht mehr. Eine Liste ist eine Menge von Elementen in einer bestimmten Reihenfolge, also z.B. 1, 3, 5, 7, 9
Wenn Du da ein Element heraus nimmst, dann bleibt die restliche Liste, also wenn man die 5 heraus nimmt: 1, 3, 7, 9

Wie das dann intern umgesetzt wird, das ist erst einmal egal. Das kann in Form von Referenzen sein, die von einem Element zum nächsten gehen. Dann würde nur die Referenz vom Element 3 auf die 7 zeigen. Oder das ist in Form eines Arrays. Dann würde eine Lücke entstehen und da müsste dann reagiert werden (vermutlich durch einfaches Kopieren aller folgenden Elemente.

Hier sind also zwei Sichtweisen:
a) die Abstrakte Sichtweise: Es wird etwas nach außen implementiert, also z.B, das Interface List<T> und man hat dann eine Sichtweise, was da nach außen passiert. Die List ist eine Black Box und man weiss nicht, was die macht.
b) die konkrete Implementation: Da muss man dann genau schauen, was man wie hat und was dann notwendig ist, damit die gewünschte Schnittstelle / der Vertrag erfüllt wird.

Generell ist wichtig: Du musst genau sagen, um was es Dir geht: Über was für eine Liste redest Du? Ist es das Interface List von Java? Eine selbst geschriebene Klasse? Ohne die Information kann ich nur diese allgemeine Information geben in der Hoffnung, dass Dir das weiter hilft.
 
Wenn du ein Element aus einer Liste entfernst, wird das "Loch" automatisch aufgefüllt, indem alle folgenden Elemente um eine Position verschoben werden, um die Lücke zu schließen. Das bedeutet, dass du die Liste nicht manuell sortieren musst.

Du musst jedoch beachten, dass das Entfernen von Elementen aus einer Liste Auswirkungen auf die Indizes anderer Elemente haben kann. Wenn du also Elemente aus einer Liste entfernst und später auf Elemente nach Index zugreifen möchtest, musst du sicherstellen, dass du die Indizes der verbleibenden Elemente korrekt behandelst.

Wenn du ein Element an einer bestimmten Stelle in der Liste einfügen möchtest, wird die Position des Elements automatisch festgelegt, indem alle folgenden Elemente um eine Position verschoben werden, um Platz für das neue Element zu schaffen. In diesem Fall musst du die Liste ebenfalls nicht manuell sortieren.
 
Beachte, dass das mit den "Löchern" dann stimmt, wenn das Element mit einem "remove" Befehl entfernt wurde.
Eine Position auf null zu setzen heißt nicht, dass ein Listenelement entfernt wurde.

"A","B","C","D"
remove (2) -> "A","B","D"

"A","B","C","D"
set (2,null) -> "A","B",null,"D"


ps: Wie du siehst, ändert der remove-Befehl auch die Länge der Liste, das Setzen auf null macht das nicht.
@KonradN hat vollkommen recht mit den Implementierungsdetails, die muss man nicht kennen. Aber was bestimmte Methoden des Interfaces machen sollen, ist vordefiniert. Machen sie was anderes, dann ist die Implementierung schlichtweg falsch.
 

Zurück
Oben