# Index in einem Array löschen



## R.Anderson (27. Apr 2017)

Hallo Leute,
ich versuche eine Delete-methode zu schreiben, die ein Element aus einem Array löscht und folgende Elemente nach vorne zieht, sodass keine Lücke entstehen und freie Positionen immer am Ende des Arrays anzutreffen sind.
so sieht meine Klasse aus:

```
public class GrowingArray<T> {

    private static final int INITIAL_SIZE = 10;

    private int index = 0;

    private T[] store;

    public GrowingArray() {
        store = (T[]) new Object[INITIAL_SIZE];
    }

    public GrowingArray(int size) {
        store = (T[]) new Object[size];
    }

    public void add(T o) {
        if (index >= store.length) {
            grow();
        }
        store[index] = o;
        index++;
    }

    private void grow() {
        T[] temp = (T[]) new Object[store.length * 2];
        for (int i = 0; i < store.length; i++) {
            temp[i] = store[i];
        }
        store = temp;
    }
```


----------



## R.Anderson (27. Apr 2017)

ich will zum Beispiel index x löschen:
hier ist meine Methode, aber irgendwas stimmt nicht

```
public void Delete ( int x)
    {
        int size = GrowingArray.length;
        int[] store = new int[Initial_size-1];  
        int resulArrayCount = 0;
        for(int i = 0;i < size; i++)
        {         
            if (i!=Index x)
            {             
              
                store[resulArrayCount] = GrowingArray[i];
                resulArrayCount++;
            }
           
        }
}
```


----------



## VfL_Freak (27. Apr 2017)

Moin,

EIN Beitrag hätte auch gereicht ! 

Sodann: nutze bitte die Code-Tags ... sie sind nicht zum Spaß da!
So bekommt man ja Augenkrebs .... 

Es sind im Code doch soviele Fehler vorhanden, dass ich gar nicht weiß, wo ich anfangen soll ...
Beispiel:

```
if( i !=Index x )
```
dies ist vieles, aber kein gültiger Vergleich (oder soll es PseudoCode sein ??)



> ich will zum Beispiel index x löschen


Du kannst keine Indexe löschen, allenfalls Werte an einem Index.

Ich glaube, Du solltest Dir zunächst einmal die Grundlagen zum Arbeiten mit Arrays anschauen! Bspw.:
http://openbook.rheinwerk-verlag.de...03_007.htm#mj11a4689950bdbe50e0c6342eb22737a6
http://www.java-programmieren.com/arrays-java.php

Gruß Klaus


----------



## R.Anderson (27. Apr 2017)

Ok. danke an alle, ich schaue mir nochmal Java Tutorium über Arrays an. Aber kann eine Delete Methode zwei Funktionen erfüllen  nämlich ein Element löschen und nachfolgende Elemente nach vorne ziehen?
Wie sieht denn(evtl. allgemein) eine solche Methode aus???


----------



## Meniskusschaden (27. Apr 2017)

R.Anderson hat gesagt.:


> Wie sieht denn(evtl. allgemein) eine solche Methode aus???


Man beginnt bei der zu löschenden Position `x` und schreibt dort den Wert der nachfolgenden Position `x+1` rein. Das wiederholt man für die folgenden Positionen und setzt schließlich die letzte auf `null`.


----------



## DefconDev (27. Apr 2017)

Werte lösche in einem Array in java ist unmöglich. Du kannst höchstens Werte überschreiben. Wenn du Werte entfernen willst, brauchst du dynamische Listen.


----------



## Meniskusschaden (27. Apr 2017)

Hängt eben davon ab, wie man den Begriff "Löschen" definiert. Hier ist damit wohl gemeint, das entsprechende Element aus dem Array zu entfernen.


----------



## DefconDev (27. Apr 2017)

Bitte korrigiere mich aber ein Element aus einem statischen Array zu löschen also zu entfernen ist aber auch nicht möglich. Du überschreibst den jeweiligen Wert.


----------



## Meniskusschaden (27. Apr 2017)

Du hast natürlich recht, dass das Array nicht kleiner wird, wenn man ein Element daraus löscht bzw. überschreibt. Andererseits geht es bei der Aufgabenstellung um ein durch Kopieren mitwachsendes Array. Da könnte man natürlich nach demselben Prinzip auch mal wieder Speicher freigeben.

Meines Erachtens ist das hier aber Wortklauberei. Im Sinne der Aufgabenstellung ist es doch vernünftig, das Entfernen eines Objektes aus einem Behälter als Löschen zu bezeichnen. Das entfernte Objekt (nicht der Speicherplatz seiner Referenz) wird daraufhin übrigens tatsächlich bald vom garbage collector gelöscht, sofern es keine weiteren Referenzen darauf gibt.


----------



## DefconDev (27. Apr 2017)

Ich wollte es nur verdeutlichen weil ich den Eindruck habe dass es dem TE nicht bewusst ist.

Und in dem Beispiel wird ein Array eines primitiven Typen genutzt, also der reservierte Speicher ist immer da solange das Array gebraucht wird, also der gc kommt hier nicht zum Einsatz wenn eine Variable überschrieben wird.


----------



## Meniskusschaden (27. Apr 2017)

Hades85 hat gesagt.:


> Und in dem Beispiel wird ein Array eines primitiven Typen genutzt, also der reservierte Speicher ist immer da solange das Array gebraucht wird, also der gc kommt hier nicht zum Einsatz wenn eine Variable überschrieben wird.


Das ist nur in seinem Lösungsversuch so. In der eigentlichen Aufgabenstellung geht es um Objekte.


----------

