Neuer Instanz automatisiert einen Namen zuweisen

Syrill

Mitglied
Hallo!

Ich rätsle gerade an folgendem Problem rum:
Wie kann ich einer neuen Klasse einen "automatisierten" Namen geben? Also, dass ich nicht für jede Instanz einer Klasse einen Namen selbst bestimmen muss, sondern sie nach einem gewissen Schema benenne.
Ich stelle mir das in etwa wie folgt vor:
Code:
int x;
Klasse x++ = new Klasse();
Geht natürlich so nicht. Aber wie könnte es denn sonst möglich sein?

Bzw.: Ist es überhaupt möglich?


mfg,
Syrill


PS: Ich versuche eine LinkedList selbst zu implementieren und brauche dazu für jedes neue Element (also Klasse) eine Referenzmöglichkeit. Ein (einzigartiger) Name wäre da ideal.
 
Zuletzt bearbeitet:
Bzw.: Ist es überhaupt möglich?

Nein. Das geht in der Form nur in Skript-sprachen.

Du musst eine Liste oder ein Array dafür nehmen.

Edit:
PS: Ich versuche eine LinkedList selbst zu implementieren und brauche dazu für jedes neue Element (also Klasse) eine Referenzmöglichkeit. Ein (einzigartiger) Name wäre da ideal.

Der Witz an einer verketteten Liste ist ja, dass du nur eine Referenz auf ein einziges Element brauchst (oder auf zwei, bei doppelt verketteter Liste).
 
Zuletzt bearbeitet:
Neuer Instanz automatisiert einen N ...

Hallo,

schau dir mal ArrayLists an. Damit kannst du beliebig viele Instanzen einer Klasse halten und sie mit der get()-Methode herausholen ohne den konkreten Namen wissen zu müssen.

Grüße
Robert
 
Danke für eure Antworten! :)

Du musst eine Liste oder ein Array dafür nehmen.
Wenn man eine Liste nachzubilden will, wäre es etwas seltsam dafür wieder eine Liste zu nehmen. Also ein Array. Es kann sein, dass ich mich da völlig verrannt habe (um die Uhrzeit kein Wunder), aber wie instanziere ich dann dabei die einzelnen Elemente? Irgendwie muss ich sie dabei ja benennen?!

Der Witz an einer verketteten Liste ist ja, dass du nur eine Referenz auf ein einziges Element brauchst (oder auf zwei, bei doppelt verketteter Liste).
Ist mir schon klar, aber dafür muss ich das Element ja ansprechen können und zwar von einem anderen Element aus und nicht nur von der "übergeordneten" Listenklasse aus.
In dieser könnte ich sie immer passend in neue Arrays ordnen, aber dann verweißen sie ja nicht selbst aufeinander.


schau dir mal ArrayLists an. Damit kannst du beliebig viele Instanzen einer Klasse halten und sie mit der get()-Methode herausholen ohne den konkreten Namen wissen zu müssen.
Ich versuche ja eine Liste nachzubilden, nicht eine zu verwenden... :)
 
Zuletzt bearbeitet:
Ein Array ist dafür ziemlich ungeeignet, weil:
a) Hast du dann keine Liste, sondern eher eine Arrayklasse
b) Zum Hinzufügen/Löschen kannst du immer das gesamte Array neu anlegen, da sich Arrays nicht einfach so vergrößern/verkleinern lassen

Aber bei einer Liste brauchst du sowieso kein Array, du brauchst nur das erste Element. Nur eines.
Ein Element besteht wiederrum aus dem Wert und einem Verweis zum nächsten.
Das zweite hat wieder einen Wert und weiß, wo das dritte ist usw...
 
Wenn man eine Liste nachzubilden will, wäre es etwas seltsam dafür wieder eine Liste zu nehmen.

Das hab ich vor deinem PS geschrieben.

Ist mir schon klar, aber dafür muss ich das Element ja ansprechen können und zwar von einem anderen Element aus und nicht nur von der "übergeordneten" Listenklasse aus.

Deine Klasse "ListenElement" bekommt einfach ein Datenelement vom Typ "ListenElement", welches auf das nächste Zeigt.
 
Aber bei einer Liste brauchst du sowieso kein Array, du brauchst nur das erste Element. Nur eines.
Ein Element besteht wiederrum aus dem Wert und einem Verweis zum nächsten.
Das zweite hat wieder einen Wert und weiß, wo das dritte ist usw...
Ich habe ja zwei Klassen. Die eine ist für die Verwaltung der ganzen Liste zuständig, inklusive Iterator, add, remove usw. Methoden. Die andere beschreibt ein Element der Liste. Wenn ich jetzt aus der ersten Klasse heraus die zweite Klasse instanziere, um die Liste zu erweitern, dann weiß ich einfach nicht, wie ich auf ein weiteres Element der Liste, also eine andere Instanz der zweiten Klasse verweisen soll, ohne deren Namen zu kennen.
Und vorallem wird es kompliziert, wenn ich dann einfach zwischendrin etwas einfügen will.

Das Konzept einer Liste ist mir klar, nur mit der konkreten Implementierung tue ich mir gerade, wegen des geschilderten Problems, unheimlich schwer.


PS: Oder muss ich alle Elemente immer über das eine definierte Anfangselement ansteuern und dann eben n mal die next-Methode aufrufen, um zu Element n-1 zu kommen? Dann wäre jede Operation inmitten der Liste aber wirklich unschön...
 
Zuletzt bearbeitet:
PS: Oder muss ich alle Elemente immer über das eine definierte Anfangselement ansteuern und dann eben n mal die next-Methode aufrufen, um zu Element n-1 zu kommen? Dann wäre jede Operation inmitten der Liste aber wirklich unschön...

Richtig. So ist eine Liste nunmal.

Um die Performance ein wenig zu verbessern, könnte man bei einer doppelt verketteten Liste (bei der jedes Element das vorne und das danach kennt):
Nicht immer vom Anfangselement ausgehen, sondern einfach sein "Anfangselement" dort haben, wo man als letztes den Wert gebraucht hat.
Man muss natürlich mit einem int mitzählen, beim wievielten Element man vom originalen Anfang aus ist.
 
Richtig. So ist eine Liste nunmal.

Um die Performance ein wenig zu verbessern, könnte man bei einer doppelt verketteten Liste (bei der jedes Element das vorne und das danach kennt):
Nicht immer vom Anfangselement ausgehen, sondern einfach sein "Anfangselement" dort haben, wo man als letztes den Wert gebraucht hat.
Man muss natürlich mit einem int mitzählen, beim wievielten Element man vom originalen Anfang aus ist.
Ich hatte inzwischen schon daran gedacht eher eine doppelt verkettete zu basteln. :)

Wenn ich also beispielsweise um 3 "vorrücken" will sähe das in etwa so aus:
Code:
for(int i = 0; i < 3; i++) {
ElementKlasse.getnext();
}
ElementKlasse.next = //beispielsweise jetzt neuen Zeiger einfügen
Und mit der letzten Zeile greife ich dann auf das dritte Objekt nach dem Ursprungsobjekt zu?
 

Neue Beiträge

Zurück