# Element aus Array löschen andere Elemente verschieben?



## 0001001 (24. Dez 2005)

Hab hier ein Array aus Objekten (Fahrzeuge).
Wie lösche ich ein Objekt aus dem Array raus und verschiebe alle nachfolgenden um eins nach vorne und mache das Array um eins kürzer?
In C++ ging sowas mit Zeigern, aber in Java ...keine Ahnung.

Ich wills mit nem Array lösen und nicht mit einer Arraylist.


----------



## Beni (24. Dez 2005)

> Ich wills mit nem Array lösen und nicht mit einer Arraylist.


Wieso?


```
Car[] array = ...

// Element an der Stelle 3 entfernen
array[3] = null;

// Daten innerhalb des Arrays herumkopieren:
// Den Block beginnend an der Stelle 4 mit 17 Elementen
// zu der Stelle 3 kopieren. Für mehr Details: guck in die API
System.arraycopy( array, 4, array, 3, 17 ):
```


----------



## Gast (24. Dez 2005)

Unfug. Ein Array ist auch in C++ ein Array, da helfen auch keine Zeiger.

Du solltest vielleicht doch eine andere Datenstruktur verwenden. LinkedList könntegeeignet sein, aber ich kenne Deine Anwendung ja nicht.


----------



## 0001001 (24. Dez 2005)

Ich meinte damit in C++ hätte ich sowas mit verketteten Listen gelöst.
Hier hab ich allerdings ein Array und das kann ich jetzt auch nicht so schnell ändern.


----------



## Guest (24. Dez 2005)

Erstelle noch ein Array mit gleicher Größe und schreibe dort 1 für gelöscht oder 0 für nicht gelöscht rein. 
Nur so 'ne Schnappsidee, wenn's keine Collection sein soll. 

Übrigens, das, was du zu C++ und Entfernen von Arrayelementen durch Umpositionieren des Zeigers, 
ohne den Platz tatsächlich freizugeben, schreibst, ist ein typisches Beispiel für Memoryleak in C++.
Man merkt es in 99% der Fälle nicht, irgendwann knallt es aber gewaltig.


----------



## Guest (24. Dez 2005)

0001001 hat gesagt.:
			
		

> Ich meinte damit in C++ hätte ich sowas mit verketteten Listen gelöst.
> Hier hab ich allerdings ein Array und das kann ich jetzt auch nicht so schnell ändern.


java.util.LinkedList


----------



## MaSch (27. Dez 2005)

Ein Element aus einem array entfernen geht  eigentlich nicht. Du könnetst natürlich einen eigenen Zähler  für die Anzahl der Arrays installieren ( int anz = 100).  Das "Löschen" eines Arrays könnte mit einer for-Schleife passieren (3.Array "löschen":  
for (int i = 3; i<=anz-2; i++) {
   ay_=ay[i+1]
}
anz = 99;_


----------



## bygones (27. Dez 2005)

0001001 hat gesagt.:
			
		

> Ich wills mit nem Array lösen und nicht mit einer Arraylist.


nur so am Rande: ArrayList == Array *g

schau dir den Source code der arraylist an, dann siehst du wie man es mit einem Array löst.

Bei vielen Einfüge bzw Löschoperationen ist eine LinkedList besser - benötigt aber mehr Speicher und besitzt keinen indexbasierten Zugriff


----------

