ArrayList in verketteter Liste

Status
Nicht offen für weitere Antworten.

Reen

Bekanntes Mitglied
Servus Leute!

Ich muss das hier nomma neu und sauber und mit weniger Kram vom Code her posten. Habe jetzt mal allen unwichtigen Schice entfernt.

Und zwar lege ich ein ByteArray an. Dieses ByteArray beschreibe ich mit einem String. Dann schreibe ich das ByteArray in eine ArrayList. Die ArrayList wird wiederrum in eine verkettete Liste geschrieben. Das klappt auch soweit. Nur bei der Ausgabe geht was schief. Listenelement 1 beinhaltet immer Listenelement 2. Und zwar liegt das irgendwie an den Byte-Array's. Definiere ich für jede ArrayList ein neues Byte-Array (z.B. für "al1" dann index_2) klappts bzw. lasse ich die Byte-Arrays generell außen vor und schreibe nur Strings rein gehts auch.

Woran liegt das denn? Das muss doch reichen, wenn ich nur ein ByteArray (index1) definiere und immer wieder neu beschreibe oder greift der bei der Ausgabe immer wieder auf das letzte ByteArray zurück, was ja noch irgendwo im Speicher liegt? Aber was einmal in der Liste liegt, dass liegt doch auch da drin, zumal er ja dann bei der Ausgabe wiederrum ein neue ArrayList Objekt anlegt.

Bitte gebt mir mal einen Tipp wie das anders oder besser gelöst werden kann. Es soll ja nicht nur wie hier im Bsp. ein oder zwei ByteArrays mit dem Index beschrieben werden, sondern einige tausend.

Danke
Reen

EDIT: Code entfernt
 
S

SlaterB

Gast
da ist keine Kunst dabei,
du hast genau ein Array, das du in beide Listen einfügst,

Speicher ist begrenzter Platz, du musst schon genau sagen, wann du ein oder zwei verschiede Array meinst:

Array in Liste1 einfügen,
Array = new Array
Array in Liste2 einfügen,

oder gleich getrennte Variablen
byte[] index_1 = new byte[7];
byte[] index_2 = new byte[7];

dann wirds noch übersichtlicher
 

Reen

Bekanntes Mitglied
Danke....

Ich war bzw. bin eigentlich noch immer der Meinung, wenn ich ein Array definiere, dieses Array mit dem String "1" fülle, dann damit in die ArrayList und dann in die Liste (für Element 1) schreibe, dass es dort drin dann auch so bei der Ausgabe bleibt.

Im nächsten Schritt würde ich jetzt wieder das "gleiche" Array nehmen, aber mit dem String "2" überschreiben, und der Rest wie oben weiter und in Listenelement 2 eintragen. Bei der Ausgabe greift er ja theo. nich auf das alte ByteArray zu. Er guggt ja was im Listenelement steht und erstellt wieder ein neues Objekt für die Ausgabe. Ich habs ja auch ursprünglich in eine Datei geschrieben, da hat er ja auch nich nur das letzte ELement reinschrieben, sondern alle der Reihenfolge nach. Also mit steigendem Index.

Sehe ich das jetzt so falsch, dass das eben gerade nich geht, so wie ich es beschrieben habe? Bissl wundern tuts mich schon!



Naja....eigentlich werden ja die ArrayListen dann in einer Schleife in die einzelnen ListenElemente geschrieben. Habe gerade rausgefunden, wenn ich die Array's unmittelbar bei jedem Schleifendurchlauf neu anlege, dann klappts auch wieder mit der Ausgabe. Und die Ausgabe zeigt nicht für alle ListenElemente den letzen Eintrag in die Liste an.

mfg
Reen
 
S

SlaterB

Gast
siehst du wohl alles richtig nun, wenn auch bisschen kompliziert ausgedrückt,

Objekte bleiben einzelne Objekte, werden nicht unaufgefordert kopiert,
stattdessen werden Referenzen darauf gespeichert,

wenn sich ein Objekt ändert, dann in allen Listen, denn überall ist das gleiche Objekt,


wenn du aber der lokalen Variablen index_1 nach dem Einfügen in ein eine Liste ein neues Array zuweist, dann bleibt das ursprüngliche wie es ist,
denn das Objekt bleibt unverändert,
es wird nur irgendeiner Variablen eine neue Referenz gegeben
 
G

Guest

Gast
Hallo....das erklärt schon einiges.

Code:
for (i=0; i<anzahlint; i++)
				{	
					byte[] index = new byte[7];		
            }

wenn du aber der lokalen Variablen index_1 nach dem Einfügen in ein eine Liste ein neues Array zuweist, dann bleibt das ursprüngliche wie es ist,
denn das Objekt bleibt unverändert,
es wird nur irgendeiner Variablen eine neue Referenz gegeben

Du meinst also den Fall, wie's in der Schleife dargestellt ist. Hier wird doch aber auch immer wieder auf dem gleichen Objekt (nämlich auf "index") gearbeitet ODER wird hier mit jedem Schleifendurchlauf auch ein neues Objekt/Instanz angelgt, die Variable "index" bekommt jetzt eine andere "neue" Referenz auf das neue Objekt/Instanz?

Eigentlich wird ja ein Objekt nur einmal angelegt, so wie ich das in der Literatur gelesen habe. Von diesem Objekt werden dann immer neue Instanzen gebildet. Jede Instanz kommt muss dann über eine Referenzvariable ansprechbar sein. Sehe ich das richtig?

Wenn ich aber wie in meinem Fall immer die gleich Variable verwende, habe ich ja quasi nur die Möglichkeit immer nur auf die letzte Instanz zu zugreifen, weil ja die alten Referenzvariablen immer wieder überschrieben werden, außer ich speicher die noch irgendwo zwischen. Sehe ich das auch so richtig?

Danke für deine Gedult!

mfg
Reen
 
S

SlaterB

Gast
> ODER wird hier mit jedem Schleifendurchlauf auch ein neues
> Objekt/Instanz angelgt, die Variable "index" bekommt jetzt
> eine andere "neue" Referenz auf das neue Objekt/Instanz?

richtig

> Von diesem Objekt werden dann immer neue Instanzen gebildet.

nicht richtig, Objekt und Instanz sind das gleiche

> Wenn ich aber wie in meinem Fall immer die gleich Variable verwende, habe ich ja quasi nur die Möglichkeit immer nur auf die letzte Instanz zu zugreifen, weil ja die alten Referenzvariablen immer wieder überschrieben werden, außer ich speicher die noch irgendwo zwischen. Sehe ich das auch so richtig?

klingt wieder richtig
 

Reen

Bekanntes Mitglied
Servus SlaterB

Jetzt habe ich aber das Prob., dass ich nich nur auch das letzte Objekt zugreifen möchte, sondern auf alle. Also kommt das jetzt ins Spiel, was ich oben schon meinte. Ich muss irgendwie die Referenzvariablen der einzelnen Objekte zwischenspeichern bzw. jeweil immer einen neuen Variablenname für das Objekt ArrayList erstellen.

Hast du ne Idee, wie ich das am besten anstellen kann? einfach "byte[] index[] = new byte[7]" über der Schleife klappt so nicht. Dann denkt der, es wird ein zweidimensionales Array draus.

danke
Reen
 
S

SlaterB

Gast
byte[] index[] sowieso nicht,
wenn dann schreibe "byte[][] index

-------

so, und wie man speichert ist dir doch grundsätzlich bekannt?
entweder in einem Array oder einer ArrayList oder ähnlichen Behältern, z.B. Kette
was geht nicht?

wenn du jetzt sagst, dass du Abspeicherung allgemein nicht kennst,
dann erzähle ich dir das nicht, das erzählt dir ein Buch,

und das testet man auch mit einfachen int-Variablen,
nicht mit Arrays in Arrays, das verwirrt nur unnötig
 

Reen

Bekanntes Mitglied
Oki...das werde ich dann morgen gleich mal versuchen.

Was mir aber gerade noch einfällt. Ist es vllt nicht einfacher, wenn ich z.B. am Listenelement 10 (angenommen ich habe 20 Einträge) was verändern möchte, aus dem Inhalt von LE 10 ein neues Objekt zu erstellen, da meine Veränderungen vornehme und dann in LE 10 das alte Objekt damit überschreibe.
Das wäre doch eigentlich die eindeutig bessere Lösung, als sich alle Referenzvariablen zu merken. Ginge das auch??

thx
Reen
 
S

SlaterB

Gast
was ist denn das für eine Logik?
1.
wenn du irgendwas in einer Liste an Position 10 hast,
wozu dann noch an andere Stelle speichern?

2.
wenn du Listenelement 10 hast, um was daraus zu erstellen und dann wieder an Position 10 zu speichern,
warum arbeitest du dann nicht direkt mit dem Objekt auf Position 10?
 

Reen

Bekanntes Mitglied
Hallo SlaterB

Habe jetzt mal eine Lösung gefunden, wie es zumindest funt

Code:
Object ref[] = new Object[100000];


for (i=0; i<5; i++)
 {	
     byte[] index = new byte[7];
     ref[i] = index;

     System.out.println(ref[i]);
}

Was ich nur nich so recht nachvollziehen kann, warum es nur mit dem Typ Objekt geht. Mir ist klar, dass alle Klassen und so weiter Unterklassen von Objekt sind. Aber eigentlich speichere ich ja quasi nur primitive Referenzvariablen und keine Objekte. Oder sehe ich das falsch?

Anderes Prob. ist ja, dass ich hier wiederrum eine feste Größe eintragen muss. Kann man das auch dynamischer machen?

thx
Reen
 
S

SlaterB

Gast
> eigentlich speichere ich ja quasi nur primitive Referenzvariablen und keine Objekte.

tja, das kann man sehen wie man es will,
denn genauso eigentlich ist das Array ja nicht für Objekte gedacht, sondern nur für primitive Referenzen darauf,

im Arbeitsspeicher wirst du ein 400000 Byte langes Objekt haben,
mit 100000x 4 Bytes für 100000 Referenzen,
die Objekte selber bleiben auf ihren Ursprungsplätzen verteilt im Speicher,

du könntest auch das riesige ref-Array selber an allen 100000 Stellen im Array eintragen,
es geht immer nur um Referenzen..

--------

statt
Object ref[] = new Object[100000];
könntest du auch
byte[][] ref = new byte[100000][];
verwenden

dynamischer mit deiner komischen Kette oder einer ArrayList,
ist das denn nicht offensichtlich?
List<byte[]> ref = new ArrayList<byte[]>(10000);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb ArrayList allgemein halten Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
W if-Abfrage bei ArrayList-Methodenaufrufen - Wie löse ich das? Java Basics - Anfänger-Themen 6
W ArrayList und toString Java Basics - Anfänger-Themen 17
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
M 2d ArrayList durchgehen Java Basics - Anfänger-Themen 2
Blkckroll45 Arraylist Java Basics - Anfänger-Themen 6
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
M static ArrayList in non-static Java Basics - Anfänger-Themen 12
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
F Erste Schritte Zahlenreihe von Arraylist in 3erBlöcke sortiert in neue Arraylist Java Basics - Anfänger-Themen 2
M ArrayList mit einer Schleife befüllen Java Basics - Anfänger-Themen 2
F Methode ArrayList mit Eingabewert Java Basics - Anfänger-Themen 2
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
thobren jtable arraylist Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
Zeppi OOP ArrayList Java Basics - Anfänger-Themen 2
P ArrayList Java Basics - Anfänger-Themen 4
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
M For Schleife/ArrayList Java Basics - Anfänger-Themen 12
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
L Methoden ArrayList Werte hinzufügen und löschen Java Basics - Anfänger-Themen 32
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
J Nur bestimmter Typ aus der ArrayList ausgeben. Java Basics - Anfänger-Themen 9
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
krgewb ArrayList von ArrayList Java Basics - Anfänger-Themen 2
R ArrayList Problem Java Basics - Anfänger-Themen 6
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
B Objektverwaltung mit ArrayList in einer seperaten Klasse Java Basics - Anfänger-Themen 24
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
F java.util.ArrayList Java Basics - Anfänger-Themen 3
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Arraylist zu einem Array bringen mit Verschachtelung Java Basics - Anfänger-Themen 11
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H ArrayList Java Basics - Anfänger-Themen 7
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4
C ArrayList mit return zurückgeben Java Basics - Anfänger-Themen 13
K Zahlenfolge ArrayList Java Basics - Anfänger-Themen 3
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
F Array in ArrayList ablegen Java Basics - Anfänger-Themen 3
V ArrayList Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
X Frage zur einer ArrayList in einer ArrayList Java Basics - Anfänger-Themen 5
F Arraylist als Pfadausgabe Java Basics - Anfänger-Themen 10
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
M Problem mit ArrayList Java Basics - Anfänger-Themen 32
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
X Problem mit Arraylist in Arraylist Java Basics - Anfänger-Themen 2
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
M UML-Klassendiagramm ArrayList Java Basics - Anfänger-Themen 1
O ArrayList oberflächig durchsuchen Java Basics - Anfänger-Themen 3
I "\n" aus ArrayList enfernen, aber wie?! Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
Jackii ArrayList ausgabe ohne Dopplung Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben