ArrayList kopieren?

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
hey, habe eine statische ArrayList.
Diese ArrayList sollen zwei Panels kriegen, jeweils als eigene Instanz:
(is in pseudo-code, es geht hier nicht um einzelheiten)

class MeinPanel{

private ArrayList myList

myList = new ArrayList (DieKlasseMitDerStatischenListe.getArrayList);

}

so, wegen dem new-Operator sollten doch jetzt beide Instanzen der Klasse MeinPanel
eine eigene, private Instanz "myList" haben. Und das sollte doch eig. unterschiedlcieh Objekte sein oder?

Wenn ich allerdings den HashCode von beiden "myLists" prüfe, dann ist es der selbe.

Wieso? Ich dachte bei jedem "new" wird ein neues Objekt erstellt.
Und wie kann ich jetzt diese eine statische Liste beiden Panels geben, aber so, dass es
intern verschiedene Listen sind?

Danke
 
M

maki

Gast
http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html#hashCode()

Es sind zwei Listen, allerdings mit denselben Elementen.
 

Marco13

Top Contributor
Wenn zwei Objekte identisch sind, dann haben sie den gleichen hashCode
Wenn zwei Objekte den gleichen hashCode haben, sind sie NICHT NOTWENDIGERWEISE identisch.
 

hdi

Top Contributor
hey, mein code ist nicht korrekt, denn man merkt dass das eine panel objekte des anderen modifiziert.

okay, dann brauch ich halt jedes element der statischen arrayliste zwei mal. mich wundert aber, dass es dafür
keine methode in der API gibt.

clone() kopiert nämlich auch keine Objekte, sondern nur eine "shallow copy".

muss ich halt in einer for-schleife alles element für element dublizieren. ich frag trotzdem sicherheitshalber,
weil ichs echt komisch finde: gibt es keine methode, mit der man eine "harte" kopie erstellen kann?
sodass es wirklich komplett andre elemente sind?

danke

edit

da war ich wohl zu vorschnell:
und zwar sind die Elemente meiner statischen ArrayList leider Objekte einer abstrakten Klasse.
d.h.: ich kann keine neuen Objekte davon erstellen, außer ich überprüfe erst total umständlich was es ist
und erstelle dann dementsprechend ein neues Objekt.
Aber das wird doch schön langsam echt zu umständlich, da muss es doch n bessern weg geben?

hier mal der code, damit das mal eindeutig klar ist:

Code:
public class Pool {

    private static ArrayList<Steerable> elements;
    private static Random gen;

    public static void init() {

        gen = new Random();
        elements = new ArrayList<Steerable>(5000);
        int count = 500;
        while (count > 0) {
            if (gen.nextInt(100) == 99) {
                elements.add(new Diamond());
            } else {
                Bubble b1 = new Bubble(gen.nextInt(6));
                Bubble b2 = new Bubble(gen.nextInt(6));
                elements.add(new Duals(b1, b2));
            }
            count--;
        }
    }

    public static ArrayList<Steerable> getPool() {
        return elements;
    }
}

und mein Panel, von dem ich zwei Instanzen mache, sagt in der entsprechenden Methode:

Code:
private ArrayList<Steerable> pool;

pool = new ArrayList<Steerable> (Pool.getPool());

das geht also eben nicht, weil jedes Panel seine EIGENEN Objekte haben soll.
In einer Schleife kopieren geht aus o.g. Grund nicht, ich kann in einer schleife nicht sagen:

Code:
   pool.add( new AbstractClass(Pool.getPool().get(i)));

weil das ganze eben abstrakt ist.
Also wie ne ordentliche Kopie?
 
M

maki

Gast
und zwar sind die Elemente meiner statischen ArrayList leider Objekte einer abstrakten Klasse.
Objekte einer Abstrakten Klasse?
Bestimmt nicht ;)

Ansonsten musst du alles mitkopieren was nicht immutable ist um eine sog. "deep copy" zu erhalten.
 

JavaFred

Aktives Mitglied
hdi hat gesagt.:
gibt es keine methode, mit der man eine "harte" kopie erstellen kann?
sodass es wirklich komplett andre elemente sind?
Dafür gibt es keine Standardmittel. Die ArrayList kann ja nicht davon ausgehen, dass die in ihr enthaltenen Elemente klonbar sind. Da musst Du wohl Deine Elementklassen klonbar machen und dann selbst klonen.

Dazu solltest Du zunächst Dein Interface entsprechend anpassen:
Code:
interface Steerable extends Cloneable
{
	public Steerable clone();
}
Das "extends Cloneable" ist wichtig, damit es zur Laufzeit nicht zu einer CloneNotSupportedException kommt. Cloneable ist aber nur ein leeres Marker-Interface ohne Operationen (insbesondere ohne clone-Operation). Damit garantiert ist, dass jedes konkrete Steerable-Objekt auch wirklich clone implementiert, müssen wir diese Operation explizit in das Steerable-Interface mit aufnehmen, und zwar als public-Operation mit kovariantem Rückgabetyp (Steerable statt Object). Jetzt musst Du clone natürlich in allen implementierenden Klassen einbauen. Wie sehen denn die Klassen aus, die Steerable implementieren? Poste mal eine.

So, jetzt ist das tiefe Klonen nicht mehr besonders kompliziert:
Code:
public static ArrayList<Steerable> deepClone(ArrayList<Steerable> original)
{
	ArrayList<Steerable> klon = new ArrayList<Steerable>(original.size());
	for (Steerable s : original)
		klon.add(s.clone());
	return klon;
}

Der clone-Mechanismus ist in Java ziemlich gewöhnungsbedürftig. Wenn Du aber Exemplare unterschiedlicher Klassen in eine Liste packen und diese dann klonen willst, kommst Du kaum drum herum.
 
G

Guest

Gast
hm.. also ich hab ja kein interface, sondern eine abstrakte klasse, die abstrakte methoden anbietet.
diese überschreiben die einzelnen konkreten Unterklassen.

Also so geht ja Cloneable nicht zu implementieren. Ich kann ja nich von nem Interface erben.
 

JavaFred

Aktives Mitglied
Anonymous hat gesagt.:
Also so geht ja Cloneable nicht zu implementieren.
Natürlich geht das. Dann sieht der Code halt ein bischen anders aus:

Code:
abstract class Steerable implements Cloneable 
{ 
    public abstract Steerable clone();

    // ...
    // Deine restlichen abstrakten Methoden
    // ...
}

Bitte eine Klasse posten, die von Steerable erbt. Und poste bitte auch mal Steerable, würde mich interessieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
I Teile von ArrayList in eine andere kopieren? Allgemeine Java-Themen 2
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
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
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
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
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

Ähnliche Java Themen


Oben