Java wie würdet ihr das realisieren?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo Huhngut,

das ist eine ziemlich "klassisches" Aufgabe.

Da stellt sich sofort die Frage was man haben möchte:

Muss das Objekt wirklich mit Alter X aus der Liste fliegen, oder reicht es, wenn es beim nächsten Abrufen nicht mehr da ist, sich nach außen also so verhält als wäre es nach X Sekunden aus der Liste geflogen.

1) Man muss wohl Multi-Threading benutzen. Einen Thread, der zum Zeitpunkt X geweckt wird um das Objekt zu entfernen. Dieser Thread muss also "wissen", wann das nächste Objekt zu fliegen hat, damit er geweckt werden kann. Ein Ansatz bei dem ein Thread alle x Millisekunden selbst nachsieht ist eher nicht so toll, sondern reine Ressourcenverschwendung. Dazu kommt, dass man zwar alle X Millisekunden nachsehen kann, aber dann trotzdem den richtigen Zeitpunkt um X verfehlen kann.

2) Man hält die Liste der Objekte inklusive Ablaufzeitpunkt vor. Sobald ein Zugriff (per Methode) erfolgt wird zunächst geprüft ob das Objekt noch gültig ist, oder ob es entfernt werden muss. Falls es entfernt werden muss, wird es entfernt und nicht mehr zurückgegeben.

Falls möglich würde ich zu Lösung 2 greifen, weil man hier nicht mit Threading arbeiten muss und damit auch die ganzen Herausforderungen die damit verbunden sind vermeidet.

Gruß und viel Spaß

Da du oft Elemente vom Anfang der Liste entfernst, eignet sich hierfür am besten eine Queue (Warteschlange).

Für das Entfernen nach 2 Sekunden brauchst du entweder multithreading, oder eine asynchrone Laufzeit, etwa eine Event Queue.

Woher ich das weiß:Studium / Ausbildung – Informatikstudium

wenn du regelmäßig durch die liste der items iterierst, kannst du zb einfach die zeit des hinzufügens in dem objekt speichern und diese dann mit der aktuellen zeit vergleichen. wenn das item dann länger als gewünscht existiert löscht du es aus der liste.

sonst könntest du das zb mit dieser klasse realisieren

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html

mit scheduleWithFixedDelay. da musst du dann allerdings bedenken, dass es in einem anderen thread läuft also bedenken, wenn du das item aus der liste entfernst.

Woher ich das weiß:Studium / Ausbildung – Keine Freunde, keine Hobbys - dafür Computer und Informatik

Dann muss ich ja für jede Klasse die item implementiert noch eine variable erstellen kann man das nicht automatisieren

0
@Huhngut

im normalfall sollte die nächste stufe nach einem interface eine abstrakte klasse sein. dort kannst du das dann zb im kontruktor realisieren.

0
@Tyldu

Das problem ist ich kann nur von einer klasse erben aber ich denke ich mach das

0

Anmerkung: Es ist nicht unbeding nötig, Multithreading zu verwenden, man kann parallel eine Liste von Verfallszeiten verwalten und diese dann beim Zugriff kurz abarbeiten.

Jo. Aber nenne Objekte nicht "Items".

er kann seine objekte doch so nennen wie er lustig ist.

0
@DreiGegengifts

also soll er seine liste die objekte vom typ item enthält objects nennen anstatt items? halte ich für keine sonderlich gute namensgebung

@Huhngut lass dir nix sagen alles gut.

0
@Tyldu
also soll er seine liste die objekte vom typ item

Wenn der Typ "item" heißt. Das wäre dann gegen die Java Konventionen. Ich denke nicht, dass er einen Typen mit der Bezeichnung "item" hat. Wenn doch - umbenennen in einen sinnvollen Namen :-)

0

Wie soll ich die liste dann nen en warum passt items nicht für eine liste an item objekten

0
@Huhngut

Eine Liste ist eine Liste, ein Objekt ist ein Objekt, und Einträge in einer Liste sind Items. Du nennst "Item" in drei unterschiedlichen Kontexten. In zweien ist es falsch und führt zu Missverständnissen.

0
@DreiGegengifts

eine arrayliste ist auch ein objekt aber gut.

er nutzt das alles richtig, keine ahnung was dein problem ist. wenn er ein objekt der klasse item erstell, ist es eigentlich nicht misszuverstehen was er mit "item" meint.

0
@Tyldu
eine arrayliste ist auch ein objekt aber gut.

Ein Item kann auch ein Objekt sein. Sinnfreier Einwand. Zum Rest: Ich wiederhole mich nur ungern. Siehe oben.

0
@DreiGegengifts

ein item ist in dem fall hier einfach ein objekt, dass das interface item implementiert. da gibts wie gesagt nichts misszuverstehen.

er sagt doch hier klar und deutlich, dass er ein interface names item hat und eine arraylist names items.

deine antwort ist einfach ein sinnfreier einwand. jeder andere hier außer du scheint die frage komplett richtig verstanden zu haben.

0

Was möchtest Du wissen?