Arraylist mit anderer ArrayList überschreiben

Hieu

Aktives Mitglied
Hallo Leute ich hätte mal eine grundlegende Frage. Nehmen wir an ich hätte eine Arraylist wo Kunden gespeichert werden und dann noch eine andere ArrayList wo auch Kunden gespeichert werden. Wie kann ich Daten einer ArrayList mit den Daten der anderen ArrayList überschreiben?
 

httpdigest

Top Contributor
Java:
List<Kunde> kundenListe = ...;
List<Kunde> andereKundenListe = ...;
kundenListe.clear(); // <- `kundenListe` leeren
kundenListe.addAll(andereKundenListe); // <- `kundenListe` mit den Kunden aus `andereKundenListe` füllen
 
K

kneitzel

Gast
Wenn die Instanz die gleiche bleiben muss:
Erst clear und dann ein addAll mit der zweiten Instanz mit toArray als Parameter.

Wenn die Instanz des Ziels eine andere sein darf:
Einfach ein clone() aufrufen und zuweisen

Falls du keine zwei getrennten ArrayListen brauchst:
Einfach die Referenz zuweisen

Edit: httpdiggest hat natürlich Recht, addAll will eine Collection und kein Array als Parameter ... daher geht der Aufruf ohne toArray()
 
K

kneitzel

Gast
Das trifft es ziemlich gut: kommt die ClassCastException oder geht es ohne? :)
Also das Probleme sehe ich hier nicht. Wo siehst Du dieses Problem bei zwei ArrayList<Kunde>, die gegeben sind?

Argumente wieso dein Vorschlag besser ist, sehe ich aber natürlich auch. Einer wird z.B. direkt sichtbar, wenn man mit Interfaces arbeitet. Die List<> hat halt kein clone().
 

mihe7

Top Contributor
Also das Probleme sehe ich hier nicht. Wo siehst Du dieses Problem bei zwei ArrayList<Kunde>, die gegeben sind?
Ne, das war nicht speziell auf dieses Beispiel bezogen. Ich dachte eher an etwas, wo man eine List bekommt, diese klont und dann - in Unkenntnis des Laufzeittyps - einfach mal auf ArrayList castet :)

Edit:
Die List<> hat halt kein clone().
Oha. Da sieht man mal, wie wenig ich mit clone bislang gearbeitet habe... das ist in Object ja protected :eek:
 
K

kneitzel

Gast
Ahh, ok. Danke für die Aufklärung. Ich hatte kurz den Verdacht, dass es die "alte" Problematik ist, dass dies teilweise falsch/oft gemacht wurde.
Einige machen das halt falsch und dann bekommt man auch ClassCastException Probleme. Wenn ich also in A.clone() nicht super.clone() aufrufe sondern einfache in new A() erzeuge ... dann wird B von A abgeleitet, B.clone ruft super.clone() auf aber bekommt dann natürlich ein A und kein B und der Cast auf B schlägt fehl.

So ein clone greift halt immer auf ein super.clone() zurück und das landet dann am Ende bei Object.clone(), welches dann eine neue Instanz der Klasse selbst erzeugt (also bei B.clone() wird das ein B. A bekommt dann auch schon ein B, aber das kann man in A casten....

Also in ArrayList hat man dann einen cast auf ArrayList von eben super.clone() wenn man sich das einmal anschaut.

So man klare Typen hat, dann funktioniert das schon recht gut. Aber ich gebe zu, dass ich es nicht gut durchdacht habe und es kam mir halt in den Sinn - habe ich halt in der Vergangenheit auch schon Dinge mit machen dürfen. Aber der Hauptgrund ist für mich, dass man ja mit Interfaces arbeitet (also in der Regel List statt ArrayList) und wenn man dann neue Instanzen erzeugt, dann greift man halt auf konkrete Klassen zurück. Und da ist Dein Weg genau der, der halt genommen wird.

Bei einer List wäre ansonsten der Weg List -> Cloneable -> clone() -> List
Und hätte dann die Einschränkung, dass es nur für List Implementationen funktionieren würde, die auch Cloneable implementieren.
Also zum einen Aufwändig und zum anderen stark eingeschränkt ...
 

LimDul

Top Contributor
Meine letzte Begegnung mit Clone ist noch aus einem Projekt wo zum einen generierter Code drin und wir zum anderen GregorianCalender zum speichern von Datumsangeben genutzt haben. Und da wurde jeder getter auf GregorianCalender-Attribut als return (GregorianCalender)datum.clone(); generiert. Seitdem gott sei Dank so gut wie nie mehr gebraucht :) (Sowohl Clone als auch das unsägliche GregorianCalender)
 

temi

Top Contributor
Einige machen das halt falsch und dann bekommt man auch ClassCastException Probleme. Wenn ich also in A.clone() nicht super.clone() aufrufe sondern einfache in new A() erzeuge ... dann wird B von A abgeleitet, B.clone ruft super.clone() auf aber bekommt dann natürlich ein A und kein B und der Cast auf B schlägt fehl.

So ein clone greift halt immer auf ein super.clone() zurück und das landet dann am Ende bei Object.clone(), welches dann eine neue Instanz der Klasse selbst erzeugt (also bei B.clone() wird das ein B. A bekommt dann auch schon ein B, aber das kann man in A casten....

Das liest sich ähnlich wie die Metaphern unseres Bayerischen Wirtschaftsministers

Sorry für den Offtopic...
 
K

kneitzel

Gast
Meine letzte Begegnung mit Clone ist noch aus einem Projekt wo zum einen generierter Code drin und wir zum anderen GregorianCalender zum speichern von Datumsangeben genutzt haben. Und da wurde jeder getter auf GregorianCalender-Attribut als return (GregorianCalender)datum.clone(); generiert. Seitdem gott sei Dank so gut wie nie mehr gebraucht :) (Sowohl Clone als auch das unsägliche GregorianCalender)
Wobei das eigentlich der Usecase ist, in dem es Sinn macht (das Clone). Du willst halt eine Referenz zurück geben, die einen 'Wert' darstellt und die Klasse ist nicht immutable... Eine Veränderung soll sich halt nicht auswirken bei Dir.

Diese Clone Verwendung Ist sehr stark bei mir verdrängt worden dadurch dass vieles immutable geworden ist. Wenn du also von einer MyCoolClass per Getter eine Instanz von MyCoolData bekommst, dann ist das etwas ohne Setter und so, so dass die gespeicherte Referenz direkt zurück gegeben werden kann.

Das hat sich auch bei der Arbeit mit (parallelen) Streams bewährt / positiv bemerkbar gemacht.
 

mihe7

Top Contributor
Ich denke auch, dass man sehen muss, dass clone() "historisch gewachsen" ist. Mal abgesehen davon, dass es seinerzeit Generics in Java noch nicht gab (im Gegensatz zu Templates in C++), war in den 90ern ja Vererbung noch das Maß aller OO-Dinge. Im Zusammenhang mit Polymorphie ist clone() tatsächlich interessant. "Leider" brauche ich das heute nie :) Ich kann mich zwar dunkel daran erinnern, dass ich clone() auch schon verwendet habe, aber nicht mehr, wann. Das ist zu lange her, ich schätze mal Anfang der Nuller-Jahre.
 

temi

Top Contributor
Ein kurzes Résumé aus "Effective Java" von Joshua Bloch zu den vorherigen Erläuterungen aller Schwierigkeiten mit clone():
Angesichts all der mit Cloneable verbundenen Probleme sollte Cloneable nicht um neue Schnittstellen erweitert und nicht von neuen erweiterbaren Klassen implementiert werden. Auch wenn es für finale Klassen weniger gefährlich ist, [..], sollte diese Maßnahme als Performanceoptimierung betrachtet werden und nur den seltensten Fällen vorbehalten bleiben, [..]. Als Regel können Sie sich merken, dass Kopierfunktionalität am besten von Konstruktoren oder Factory-Methoden bereitgestellt wird. Eine nennenswerte Ausnahme zu dieser Regel bilden Arrays, die am besten mit der clone-Methode kopiert werden.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
GreenTeaYT Verständnisprobleme zur Arraylist Allgemeine Java-Themen 1
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
K ArrayList sortieren Allgemeine Java-Themen 16
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
S Mehrdimensionales ArrayList ins HashSet Allgemeine Java-Themen 10
C ArrayList Allgemeine Java-Themen 8
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
K Array in ArrayList Allgemeine Java-Themen 16
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
Paul15 Arraylist 2D Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
F ArrayList Allgemeine Java-Themen 11
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
R ArrayList und HashMap Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
Doopy ArrayList plötzlich leer Allgemeine Java-Themen 2
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L ArrayList Inhaltstyp. Allgemeine Java-Themen 5
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
J Arraylist speichern und laden? Allgemeine Java-Themen 5
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
M ArrayList<String> Frage Allgemeine Java-Themen 7
O ArrayList kaputt?! Allgemeine Java-Themen 5
M ArrayList<Foo> in ein Foo[] konvertieren? Allgemeine Java-Themen 8
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
O ArrayList - Serialisierungs-Problem Allgemeine Java-Themen 11
M JTable + ArrayList Allgemeine Java-Themen 3
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4
S arraylist nach n. Eintrag numerisch Sortiren Allgemeine Java-Themen 5
O Problem beim Auslesen einer Arraylist von JComboBoxen Allgemeine Java-Themen 2
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
M Kovariante Rückgabewerte mit ArrayList Allgemeine Java-Themen 3
H LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ? Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
Maxim6394 Problem mit ArrayList Allgemeine Java-Themen 5
E Berechnung in Arraylist Allgemeine Java-Themen 10
E ArrayList mit unbekannter Größe Allgemeine Java-Themen 8
V Fork Join bei Arraylist Allgemeine Java-Themen 6
H Fehler in Arraylist Allgemeine Java-Themen 2
S Datensätze in eine ArrayList<Movie> speichern Allgemeine Java-Themen 13
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
J ArrayList-Problem Allgemeine Java-Themen 16
S Von einer ArrayList in die andere schreiben? Allgemeine Java-Themen 6
S ArrayList<JLabels> "malen" Allgemeine Java-Themen 4
E ArrayList in ArrayList, Referenzierungsproblem Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben