ArrayList in eigener Klasse erzeugen mit Zugriff

Nelzon

Mitglied
Grüße,
ich hab viel zu der ArrayList gefunden, allerdings nicht wie ich die Zugriffe darauf regeln kann. Grundidee ist eine eigene Klasse für die ArrayListe, die zuvor erstellte Objekte übergeben bekommt, diese dann an einen Stack zu übergeben, abzuarbeiten usw.
Da ich mit dem komplexeren Code überhaupt nicht weiterkam, hab ich es mal auf das einfachste heruntergebrochen:

Java:
package classtest;

public class main {

    public static void main(String[] args)
    {
        Klassenerstellung test = new Klassenerstellung("asd", 123);
        // System.out.println(test.getA());
        Arrayerstellung yxc = new Arrayerstellung();
        yxc.elementHinzu(test);
        yxc.leseElement(0);
    }

}

Java:
package classtest;

public class Klassenerstellung {
   
    String a;
    int b;
   
    Klassenerstellung(String a, int b)
    {
        this.a = a;
        this.b = b;
    }

    public String getA() {
        return a;
    }
}

Java:
package classtest;

import java.util.ArrayList;
import java.util.List;

public class Arrayerstellung
{
    private List<Klassenerstellung> dasArray;
   
    Arrayerstellung()
    {
        dasArray = new ArrayList<>();
    }
   
    void elementHinzu(Klassenerstellung element)
    {
        dasArray.add(element);
    }
   
    void leseElement(int a)
    {
        System.out.println(dasArray.get(a));
    } 
}

Das Problem ist anscheinend der Zugriff auf meine arrayListe, ich bekomme ständig nur

Code:
classtest.Klassenerstellung@532760d8

Ich experimentier damit jetzt schon den ganzen Tag herum, hab schon alles mögliche probiert und schaue mal was passiert - aber ich schaffe es absolut nicht auf meine ArrayList mit Namen "yxc" in irgendeiner Weise ordentlich zuzugreifen. Alles was überhaupt zu funktionieren scheint ist das Element hinzuzufügen, da ich ja zumindest vom ersten Index ne Speicheradresse genannt bekomme.

Ich finde es auch ziemlich verwirrend, das ich die ArrayListe in der Klasse unbedingt benennen muss (hier "dasArray"), wo ich ihr doch bei der Objekterstellung einen eigenen Namen gebe ("yxc", hab aber auch "dasArray" probiert, es macht keinen Unterschied).
Die Klasse so zu schreiben, das ich eine Arrayliste ohne eigenen Namen erstellen könnte, ist mir aber partout nicht gelungen.
 
Entweder die toString() Methode der Klasse Klassenerstellung überschreiben, z.B. so
Java:
@Override
public String toString() {
    return a;
}
Oder die leseElement(int) Methode so umändern, dass du von dem Element noch die getA() Methode aufrufst, um den Namen auszugeben.
Also
Java:
System.out.println(dasArray.get(a).getA());

BTW: a und b sind übrigens schlecht gewählte Namen 😛
 
Nice, danke schonmal 🙂

Jedoch war "lese Element" eigentlich gedacht, um den ganzen Index auszugeben. Kann ich auch den direkt aufrufen, oder nur über die Kombination der einzelnen Elemente des Objektes das ich in die ArrayList geschrieben habe?
 
Ich übergebe der ArrayList ja ein Objekt mit zwei Elementen, hier
Java:
Klassenerstellung test1 = new Klassenerstellung("asd", 123);
Arrayerstellung yxc = new Arrayerstellung();
yxc.elementHinzu(test);
die ich dann in seiner Klasse mit der Methode
Java:
void leseElement(int a)
    {
        System.out.println(dasArray.get(a).getA() + " " + dasArray.get(a).getB());
    }
abrufen kann - so hätte ich sie ja jetzt beide hintereinander ausgegeben.
Jetzt wüsste ich aber gern, ob ich auch den gesamten Inhalt des Index 0 auf einmal aufrufen kann, sprich beide Elemente hintereinander mit einem Befehl.
Oder auch ohne Indexübergabe die gesamte ArrayList ausgeben kann.
Wenn ich die Liste nicht in einer eigenen Klasse erzeuge geht das ja bspw mit
Java:
System.out.println(yxc);
oder halt mit einer Schleife die über die Indexe rennt.

Ergänzung:
Vielleicht um das ganze klarer zu machen: ich versuche bspw danach, das ganze mal an eine Queue zu übergeben,die ich in der main-Klasse direkt auch in der main-Methode zufüge

Java:
Queue<Arrayerstellung> kasse = new LinkedList<>();
        kasse.add(yxc);
        System.out.println(kasse);
, da bekomme ich aber wieder nur
Code:
[classtest.Arrayerstellung@4141d797]
in der Konsole raus, sprich wenn ich das richtig verstehe hab ich nicht das Array an die queue übergeben, sondern nur die Angabe des Speicherpunktes.
 
Zuletzt bearbeitet:
Wenn du nicht die einzelnen Getter aufrufen möchtest, kannst du die toString() Methode der Klasse Klassenerstellung überschreiben (wie oben schon mal beschrieben).
Wenn du die gesamte Liste auf einmal ausgeben willst, dann iteriere doch einfach über die Liste und gib jedes Element einzeln aus.

Wenn du außerhalb der Klasse System.out.println(xyc) schreiben willst, musst du auch von der Klasse Arrayerstellung die toString() Methode überschreiben
 
Ah okay, jetzt kommt´s mir langsam mit dem Override 😕

Dann wäre gerade nur noch die Frage wie ich die ArrayList in der Main-Methode übergeben kann - ich hab das im letzen Post eben mal um die Problematik ergänzt..
 
sondern nur die Angabe des Speicherpunktes.
Nein du hast schon das Objekt hinzufügt. Wenn du System.out.println() ein Objekt übergibst, wird im Hintergrund dessen toString() Methode aufgerufen. Wenn diese toString() Methode nicht überschrieben ist, wird die Standartimplementierung der Klasse Object genommen .. diese gibt nun mal den Klassennamen@hashCode aus.

Wenn du jetzt die toString() Methode deiner Arrayerstellung Klasse so überschreibst, dass eben alle Elemente der Liste als String zurückgegeben werden, siehst du auch was "ordentliches".
 

Neue Themen


Zurück
Oben