Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo zusammen,
ich habe ein kleines Problem und suche nach einer Lösung um beim lernen weiterzukommen.
Ich habe eine Klasse Buch, in der gibt es einen String ISBN. Dies soll auch die "ID" jeder Instanz sein, also es darf keine zweite Instanzen mit dem gleichen ISBN String geben! (geht das? Also kann man eine Variable in einer Klasse "eindeutig" über alle Instanzen machen?)
Ausserdem würde ich gerne wenn z.B. schon eine Instanz mit der ID 12345 existiert, und eine neue Instanz erstellt werden soll mit der ID 12345, das die bestehende Instanz als Referenz übergeben wird.
Als Workaround habe ich mir hierzu überlegt eine Liste zu erstellen und alle erstellten Instanzen in diese Liste einzutragen und da nachzuschauen. Meine Frage wäre nun, ob es da ne einfachere Lösung gibt.
einfacher nicht, schneller wäre eine HashMap,
bei 1000 Elementen musst du auch in einer sortierten Liste 500x schauen,
in einer Map sind nur ein Bruchteil an vergleichbaren Arbeitsschritten nötig
an stelle eines Konstruktors musst du eine Operation verwenden
(könnte statisch sein oder in einem Factory-Objekt)
getCreateObject(String isbn) {
if bekannt return altes objekt
else erstelle neues, speichere neues, gib neues zurück
}
> geht das? Also kann man eine Variable in einer Klasse "eindeutig" über alle Instanzen machen?
nur durch obige Konstruktion oder ähnliches, nichts natürliches
Es gibt kein Java Sprachfeature, das dein Problem löst, ohne das du das Vergleichen selbst implementieren musst.
Du kannst eine Factory nutzen um die Objekte zu erstellen, und die Liste mit den bereits vergebenen ID´s dort plegen, dann hast du es sauber weggekapselt. Um platz zu sparen, würde ich jedoch eine Map nehmen und als Key die ID nehmen, als Valie nimmst du dann null oder ein int, was am wenigsten platz braucht. Bei einer Map kann man sehr schnell auf die existenz eines Key´s prüfen ohne die Liste komplet durchsuchen zu müssen.
Stimmt, wenn man sie in der Factory wiederfinden will was ich mir nicht wirklich vorstellen kann. Was aber, wenn man die Bücher anderewitig verwaltet und auch wieder löschen will? Dann jaste in der Factory eine Referenz auf das Object und damit ein Memory Leak!
Weak/SoftReferences in der Factory benutzen.
Hat den Vorteil das man sich an jeder Stelle Objekte von der Factory holen kann ohne sich darum zu kümmern ob schon eine Instanz Vorliegt.
Danke für eure superschnellen Antworten! :toll: Echt super das Board hier *dickes Lob vertei*
Ich habe mir nun eine Klasse erstellt, BuecherPool, in der ich dann eine Hashmap erstelle und mehrere Methoden zum hinzufügen,erstellen und liefern von Büchern.
In meiner Main Methode erstelle ich eine Instanz dieser BuecherPool Klasse und greife nun auf diesen Pool zu, klappt wunderbar.
Nun würde ich gerne noch ein paar weitere Klassen erweitern, damit diese ebenfalls auf den Pool zugreifen können. Wäre hierzu das sinnvollste die BuecherPool Instanz als Globale Variable zu definieren? ???:L
Sorry, aber könnt ihr mir sagen was "Factory" ist? Auf die schnelle konnte ich durch suchen bei Google mit Factory und Java nichts sinnvolles finden. :?:
die ersten Seiten liefern Links zu Programmen, Moorhuhn, Downloadseiten und Firmen *g*
Wenn man nicht genau weiss was es ist, kann man es halt schwer auseinanderhalten