Verschieben eines Arrays aus Objekten

Rol

Aktives Mitglied
Hallo,

ich erzeuge ein Array aus objekten:
Java:
public Candle myArray[] = new MyObject[100l];
...
for (int i = 0; i < 100; i++) {
      myArray[i] = new MyObject();
}

Nun möchte ich die Objekte alle um eine Stelle nach links schieben, das 0. Element soll dabei vom 1. überschrieben werden. Ich mache das so:
Java:
for (int i = 0; i < 99; i++) {
       myArray[i] = myArray[i + 1];
}

Danach haben manche Objekte im Array falsche Werte.
MfG
Rol
 

HPL

Aktives Mitglied
Ich glaube, das liegt daran, dass im Array nur die Speicheradresse des Objekts und nicht das Objekt selbst steht; leider kann ich jetzt auch nicht sagen, wie ich an Deiner Stelle anders programmieren würde.
 

XHelp

Top Contributor
was heißt denn "manche"? Meinst du zufällig die letzten beiden Werte, die dann identisch sind? Du kannst auch sowas machen:
Java:
System.arraycopy(myArray, 1, myArray, 0, myArray.length-1);
 

ARadauer

Top Contributor
Danach haben manche Objekte im Array falsche Werte.
Kann ich mir nicht vorstellen... was meinst du mit falschen werten...



Java:
import java.util.Arrays;

public class Tester {
	static Container myArray[] = new Container[100];
	public static void main(String[] args) {
		
		
		
		for (int i = 0; i < 100; i++) {
		      myArray[i] = new Container(i);
		}
		
		System.out.println(Arrays.toString(myArray));
		
		for (int i = 0; i < 99; i++) {
		       myArray[i] = myArray[i + 1];
		}
		System.out.println(Arrays.toString(myArray));
	}
	
}
	public class Container {
		private int value;

		public Container(int value) {
			this.value = value;
		}
		
		public String toString(){
			return value+" ";
		}
	}
passt genau...
 

Rol

Aktives Mitglied
Wenn ich es so mache:
Java:
       for (int i = 0; i < 99; i++) {
               myArray[i].eigenschaft1 = myArray[i + 1].eigenschaft1;
               myArray[i].eigenschaft2 = myArray[i + 1].eigenschaft2;
...
        }

funktionier es wie gewünscht. Bei:
Java:
               myArray[i].eigenschaft1 = myArray[i + 1].eigenschaft1;

haben eigenschaft1, eigenschaft2 usw. nach dem Verschieben nicht gewünschten Werte. Nach n-malgen Verschieben haben alle n-letzten Objelte die gleichen Eigenschfaten und ändern sich beim Ändern der Eigenschaften des letzten Objektes dynamisch mit.

Das wird wohl daran liegen, dass mein Array nicht die Objekte sondern nur die Referenzen auf die Objekte enthält und nur die werden beimverschieben kopiert.

Wie verschiebe ich aber denn nun die tatsächlichen Objekte im Array und nicht die Referenzen?

MfG
Rol
 
M

maki

Gast
Wie verschiebe ich aber denn nun die tatsächlichen Objekte im Array und nicht die Referenzen?
Die Frage ist so falsch ;)

In Java arbeiten wir immer nur mit Referenzen, wo die Objekte sind kann dir egal sein, diese stecken nie in einem Array/Collection.

Ansonsten: wäre eine List (zB. LinkedList) nicht besser geeignet?
 

Rol

Aktives Mitglied
Ein array passt für den Rest des Problems sehr gut. Ich muss immer wieder auf das genau n-te, m-te uws. Element zugreifen. Ich glaube eine Liste ist da nicht so gut.

Gibt es also nur die Möglichkeit über:
Java:
       for (int i = 0; i < 99; i++) {
               myArray[i].eigenschaft1 = myArray[i + 1].eigenschaft1;
               myArray[i].eigenschaft2 = myArray[i + 1].eigenschaft2;
...
        }

? Das funktioniert gut, ist aber nicht gerade "elegant", insbesondere wenn die Objektklasse mal andere oder mehr Eigenschaften bekommen soll.
 

XHelp

Top Contributor
In einer Liste könntest du einfach das 0te Element löschen und die anderen würden automatisch nachrutschen. Aber auch in einer Liste kannst du auf das x-te Element zugreifen. Dafür ist eine Liste auch da
 

theodosis

Mitglied
Schreibe eine neue Methode:

Java:
class Candle 
{
   ...
   int eigenschaft1;
   int eigenschaft2;
....
   

   protected void copyFromOtheCandleObject( Candle obj2 )
   {
       eigenschaft1 = ob2.eigenschaft1;
       eigenschaft2 = ob2.eigenschaft2;
      ...
 
   }
}


Java:
for (int i = 0; i < 99; i++) 
{
               myArray[i].copyFromOtherObject(myArray[i + 1])
}
 

Rol

Aktives Mitglied
Nach dem n-ten verschieben enthalten die n-letzten (rechtesten) Elemente des Arrays alle eine Referenz auf das gleiche Objekt. Ich habe jetzt eine Möglichkeit gefunden:

Java:
System.arraycopy(myArray, 1, myArray, 0, myArray.length-1);
myArray[myArray.length-1] = new MyObject();
Es wird also rechts immer ein neues Objekt "überschrieben".

Frage: Muss / sollt ich mich um die "links herausfallenden" Objekte kümmern oder kann man das getrost der Garbage collection überlassen?
 

nrg

Top Contributor
Nach n-malgen Verschieben haben alle n-letzten Objelte die gleichen Eigenschfaten und ändern sich beim Ändern der Eigenschaften des letzten Objektes dynamisch mit.

du hast folgendes Array:

Code:
Objekt1
Objekt2
Objekt3
Objekt4
Objekt5

Jetzt verschiebst du diese mit deinem Algo:

Code:
Objekt2
Objekt3
Objekt4
Objekt5
Objekt5

Jetzt verschiebst du diese nochmal mit dem Algo:

Code:
Objekt3
Objekt4
Objekt5
Objekt5
Objekt5

Jetzt änderst du Objekt5 an Index 4:

Code:
Objekt3
Objekt4
Objekt5 - geändert
Objekt5 - geändert
Objekt5 - geändert

Nachdem Index 2,3 und 4 alle auf ein Objekt referenzieren änderst du damit alle auf einmal.

Ich frag mich gerade noch nach dem Sinn :). Was willst du denn überhaupt machen? Du willst einfach das erste Objekt löschen? Dann nimm eine ArrayList oder erzeuge ein neues Array mit einem Feld weniger als das Ursprungsarray (ersteres ist allerdings besser)
 

Rol

Aktives Mitglied
Nach dem Code meines letzten Postings habe ich:

Am Anfang folgendes Array:
Java:
Objekt1
Objekt2
Objekt3
Objekt4
Objekt5

Dann verschieben ich einmal mit:
Java:
System.arraycopy(myArray, 1, myArray, 0, myArray.length-1);

und hane dann folgendes Array:
Java:
Objekt2
Objekt3
Objekt4
Objekt5
Objekt5

Dann mache ich:
Java:
myArray[myArray.length-1] = new MyObject();

uns habe:
Java:
Objekt2
Objekt3
Objekt4
Objekt5
Objekt5
Objekt6

Das ist genau dass, was ich wollte. Meine Frage war nun nur noch, ob ich das Objekt1 danach expliziet Löschen soll/kann/muss. Ich weiß, dass die garbage Collektion so etwas macht, aber nicht wie oft, sicher usw.
 

nrg

Top Contributor
Nach dem Code meines letzten Postings habe ich:

Am Anfang folgendes Array:
Java:
Objekt1
Objekt2
Objekt3
Objekt4
Objekt5

Dann verschieben ich einmal mit:
Java:
System.arraycopy(myArray, 1, myArray, 0, myArray.length-1);

und hane dann folgendes Array:
Java:
Objekt2
Objekt3
Objekt4
Objekt5
Objekt5

Dann mache ich:
Java:
myArray[myArray.length-1] = new MyObject();

und du hast:

Code:
Objekt2
Objekt3
Objekt4
[B]Objekt5[/B]
Objekt6

habs nicht getestet aber bin mir da ziemlich sicher. wenn du dynamik willst nimm eine liste!

Das ist genau dass, was ich wollte. Meine Frage war nun nur noch, ob ich das Objekt1 danach expliziet Löschen soll/kann/muss. Ich weiß, dass die garbage Collektion so etwas macht, aber nicht wie oft, sicher usw.

musst und kannst du nicht. auf das objekt besteht keine referenz mehr. das wird vom gc automatisch bei bedarf platt gemacht

edit beachten. c&p fehler unterlaufen :D
 
Zuletzt bearbeitet:

Rol

Aktives Mitglied
und du hast:

Java:
Objekt2
Objekt3
Objekt4
Objekt6
Objekt6

habs nicht getestet aber bin mir da ziemlich sicher. wenn du dynamik willst nimm eine liste!

Ne, habst getestet: Nur das letzte Objekt wird überschrieben, Objekt5 bleibt.

musst und kannst du nicht. auf das objekt besteht keine referenz mehr. das wird vom gc automatisch bei bedarf platt gemacht

Danke.
 

Rol

Aktives Mitglied
Weil hinzufügen geht bei Arrays nicht ohne weiteres.

Ich will auch nichts hinzufügen. Die Anzahl der Abjekte / Arrayfelder soll immer gleich belieben. Deshalb scheint mit ein Array auch nicht unpassend.

Ich will nur den Inhalt ab und zu um einen Platz nach links schieben, so dass das linke (0-te) Element "rausfällt" und rechst ein neues / leeres entsteht.
 

nrg

Top Contributor
ok dann passt das ja. dann war halt nur deine aussage

uns habe:
Java:
Objekt2
Objekt3
Objekt4
Objekt5
Objekt5
Objekt6

etwas verwirrend.

nichts desto trotz wäre das wahrscheinlich mit einer liste schöner gelöst aber wenn das erst mal so deinen ansprüchen entspricht wäre das ja erledigt ;)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
M Best Practice Verschieben einzelner Spalten eines JTables verhindern Java Basics - Anfänger-Themen 5
L Punkt innerhalb eines Bereiches verschieben Java Basics - Anfänger-Themen 9
K Elemente eines Array verschieben Java Basics - Anfänger-Themen 18
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
CptK Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
H Position verschieben der Elemtente im Array Java Basics - Anfänger-Themen 3
K Einzelne Email verschieben nicht möglich Java Basics - Anfänger-Themen 3
A Dateien Verschieben Java Basics - Anfänger-Themen 1
T Arrayposition um eine Position verschieben Java Basics - Anfänger-Themen 2
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
H Kreis verschieben Java Basics - Anfänger-Themen 10
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
J Java Array Zeichnung Skalieren und verschieben Java Basics - Anfänger-Themen 5
S Dateien mit Java verschieben Java Basics - Anfänger-Themen 6
llabusch Fenster per Button verschieben Java Basics - Anfänger-Themen 5
llabusch Fenster um x Pixel verschieben Java Basics - Anfänger-Themen 4
M JButtons verschieben Java Basics - Anfänger-Themen 13
J Array um 1 stelle verschieben Java Basics - Anfänger-Themen 2
B Fehlerhafte XML-Files verschieben Java Basics - Anfänger-Themen 6
T Verschieben Java Basics - Anfänger-Themen 4
B Dateien Verschieben! Java Basics - Anfänger-Themen 8
B ältere Dateien verschieben Java Basics - Anfänger-Themen 3
Q Komma verschieben Java Basics - Anfänger-Themen 5
J Markierte Items in einer JLIST in einen Ordner verschieben Java Basics - Anfänger-Themen 2
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
N Array inhalte verschieben Java Basics - Anfänger-Themen 12
B Methode in andere Klasse verschieben Java Basics - Anfänger-Themen 9
T JScrollPane: Slider programmgesteuert verschieben? Java Basics - Anfänger-Themen 4
GianaSisters Erste Schritte Datei umbennen bzw verschieben klappt nicht Java Basics - Anfänger-Themen 6
0 Datei verschieben Java Basics - Anfänger-Themen 6
eLogic Datei verschieben Java Basics - Anfänger-Themen 12
M Kommastellen verschieben Java Basics - Anfänger-Themen 4
R Objekt mit Maus auswählen und verschieben Java Basics - Anfänger-Themen 2
L Datei verschieben mit einer Schleife Java Basics - Anfänger-Themen 17
Hamstinator Fenster mit Maus verschieben Java Basics - Anfänger-Themen 2
U Arry verschieben Java Basics - Anfänger-Themen 2
J Datentypen Array in x Richtungen verschieben Java Basics - Anfänger-Themen 6
E Probleme mit Images verschieben Java Basics - Anfänger-Themen 4
K Punkte verschieben Java Basics - Anfänger-Themen 6
S Grosse Dateien kopieren/Verschieben Java Basics - Anfänger-Themen 14
D denkfehler, bereich verschieben awt Java Basics - Anfänger-Themen 3
D Dateien umbenennen --> verschieben Java Basics - Anfänger-Themen 4
Mike90 verschieben von Buttons, ... Java Basics - Anfänger-Themen 18
D Elemente im Array verschieben Java Basics - Anfänger-Themen 15
M Referenzen verschieben Java Basics - Anfänger-Themen 2
B zahlen verschieben tabelle Java Basics - Anfänger-Themen 2
H Objekt mit Maus verschieben Java Basics - Anfänger-Themen 4
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Datei verschieben funktioniert nicht Java Basics - Anfänger-Themen 6
M Verzeichnis verschieben Java Basics - Anfänger-Themen 5
G Ordner überprüfen und Dateien verschieben Java Basics - Anfänger-Themen 3
L Verzeichnisse mit Inhalt verschieben auf UNIX Java Basics - Anfänger-Themen 5
Silas89 Datei verschieben Java Basics - Anfänger-Themen 3
K bestimmte Dateien aus Ordner verschieben Java Basics - Anfänger-Themen 5
X Dateien Verschieben Java Basics - Anfänger-Themen 8
M JList Parameter verschieben Java Basics - Anfänger-Themen 3
M Parameter zwischen zwei JLists verschieben Java Basics - Anfänger-Themen 4
G dateien verschieben Java Basics - Anfänger-Themen 10
D JTable - Verschieben der Spalten deaktivieren <- wie? Java Basics - Anfänger-Themen 5
U BufferedImages verschieben klappt nicht Java Basics - Anfänger-Themen 37
0 Element aus Array löschen andere Elemente verschieben? Java Basics - Anfänger-Themen 7
G Array verschieben Java Basics - Anfänger-Themen 9
R mit MouseDragged Rechteck verschieben. Java Basics - Anfänger-Themen 2
I "File" - je nach änderungsdatum verschieben Java Basics - Anfänger-Themen 5
A MP3-Datei verschieben Java Basics - Anfänger-Themen 6
C Focus fürs Zeichnen verschieben?? Java Basics - Anfänger-Themen 3
A Programm in den Hintergrund "verschieben" Java Basics - Anfänger-Themen 4
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben