Einen Eintrag im Array löschen?

Servo Herko

Aktives Mitglied
Wie kann ich einen Eintrag simpel löschen von soeinem Array.
Gibt es sowas wie
Java:
a.remove(index);
?

Oder wie geht sowas, es sollte nicht so großer Quellcode raus kommen!

Vielen Dank im Vorraus 😀
 
Arrays haben eine fixe Größe. Du kannst höchstens dir eine Methode schreiben, die Werte des Arrays in ein neues kopiert und dabei den einen Wert nicht mitnimmt.
 
Java:
String [] strings = new String[10];


strings[4] = "Maus"; //Array-Eement setzen
strings[4] = null; //Array-Element löschen

Ich glaube, was du suchst ist eine von der Lenge variable Liste,

schau dir mal das Interafce List<E> und dessen Implementierungen ArrayList<E> und LinkedList<E> an.
 
Ich versuch die ganze Zeit soeine Methode zu erstellen, aber hier das Problem.

Java:
package home;

public class List<O> {
	private O[] os;
	private int by = 0;
	public List(O[] os) {
		this.os = os;
	}
	public void add(O o) {
		os[by] = o;by++;
	}
	public O get(int index) {
		return os[index];
	}
	public int getSize() {
		return os.length;
	}
	public void remove(int index) {
		/* Ich habe das Array im cunstructor einfach nur kopiert und es so erstellt,
		 *  das heisst die Größe war schon fest gelegt.
		 *  Doch ich brauche ja jetzt ein ganz neues Array, das dann 1 Eintrag kleiner 
		 *  ist als das original...
		 *  */
	}
}

Am besten wäre es halt mit O[] cos = new O[(os.length-1)];
Um alles Weitere kann ich mich später kümmern, also das mit dem rauschneiden...
 
Oh, du verwendest Generics - Sorry, übersehen. Man kann kein Array von Generics zur Laufzeit erstellen, da die Informationen über die Typen nur zur Compile-Zeit bekannt sind.

Lösung: Speicher die Daten intern als Object[]-Array. Da deine Add-Methode sich darum kümmert, dass nur Elemente vom Typ O eingefügt werden, kannst du beim Auslesen auf O casten.
 
THx, ich habe noch nie mit Object gearbeitet, aber es hat funktioniert.
Ich dachte immer man kann solche sachen nur in generics rein schreiben...

Hier der remove code:

Java:
public void remove(int index) {
	    Object[] o = new Object[os.length-1];
	    
	    int f = 0;
	    for(int i = 0; i < os.length-1; i++) {
	    	if(i == index) {
	    		f++;
	    	}
                 o[i] = os[i+f];
	    }
	    os = (O[]) o;
	}
 
Zuletzt bearbeitet:
[OT]Generisches Array erzeugen:
[/OT]
Java:
public static <T> T[] getNewArray(Class<T> clazz, int length){
    return (T[]) Array.newInstance(clazz, length);
}
 
Zuletzt bearbeitet:
tipp: ist jetzt vllt nicht wichtig, aber verwende, wenn du nur eine variable um 1 erhöhen willst statt f++ einfach ++f. hat was mit der rückgabe zu tun, f++ speichert den anfangswert kurzfristig
 
Wenn die Anwendung "f++" oder "++f" nicht Teil eines Ausdrucks ist, sind die Verhaltensweisen auf Bytecode-Ebene völlig identisch, da es dort keinen Unterschied gibt. Es gibt einfach nur eine "increment local variable"-Anweisung. Falls das Inkrement in einem Ausdruck vorkommt, generiert der Compiler den nötigen Bytecode, um die Variable ggf. vorher zu sichern und nach dem Ausdruck zu inkrementieren, wie du oben beschrieben hast. Aber das ist hier und allgemein nicht oft der Fall.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben