Welche Datenstruktor für diese Liste?

Rol

Aktives Mitglied
Hi,

ich möchte eine Datenstruktur implementieren die folgende Anforderungen erfüllt:

- sie soll Objekte beinhalten die aus Tupeln aus ca. 10 doubles bestehen (falls das überhaupt relevant ist)
- sie soll n oder weniger Objekte aufnehmen können (n wird bei 100 - 500 liegen)
- die Objekte haben eine Ordnung (Reihenfolge der Einfügung)
- wenn sie bereits n Objekte enthält soll ein neues Objekt eingefügt werden indem das älteste entfernt wird (FIFO)
- ich muss auf ein beliebiges (i-tes) Element zugreifen können und dann von diesem ausgehend das vorherige, vor-vorherige, ... , j-vorherige (j = ca. 20) zugreifen können
- das ganze soll threadsicher sein, das Verhältniss von Einfügen eines neuen Elementes zum lesen ist ca. 1 x Einfügen = 100.000 lesen.
- einmal eingefügte Objekte werden nicht mehr geändert, also nur noch gelesen bzw. irgendwann von neuen verdrängt (Diese Vorgabe könnte sich aber später ändern).

Es stellen sich nun folgende Fragen:

Nehme ich einen vector, dann ist es erstmal threadsicher aber deshalb wohl langsamer.
Oder nehme ich eine ArrayList und kümmere mich um die Threadsicherheit zu Fuß (wie?)?

Wie implementiere ich das FIFO Prinzip: schiebe ich beim Einfügen (bei voller Datenstruktur) alle Elemente durch das ganze Ding oder baue ich so eine Art Ringspeicher bei dem nur ein Zeiger (der auf den "aktuellen" Kopf zeigt) verschoben wird? Dann muss ich aber alle Anfragen nach dem n-ten Element entsprechend der "Kopfstellung" umleiten.

Das ganze soll eine Art Simulationsprogramm werden, d.h. durch die Datenstruktur werden sehr viele male sehr viele (Mio.) Objekte "durchgeschoben". Es soll also möglichst performant sein. Ich kann die angedeuteten Varianten bzgl. der zu erwartenden Performanz mangels Erfahrung nicht annährend einschätzen. Könntet Ihr mal Euere Meinung hierzu abgeben?

Oder würdet Ihr das ganz anders machen?

MfG Rol
 

Marco13

Top Contributor
Wegen der sehr speziellen Kombination von Anforderungen wäre mein Ansatz jetzt, ein Interface (!) zu schreiben, wo genau die benötigten Methoden genau spezifiziert drin stehen, und dann zu überlegen, wie man die zeitkritischen Operationen in O(1) implementieren kann.
 

obb

Mitglied
Hallo Rol,

meine Vorgehensweise wäre die folgende:
  • Die Datenstruktur generisch zu implementieren, sodass sie unabhängig von den eingespeisten Objekten ist.
  • Zur internen Verwaltung ein Array benutzen. Das bietet sich hier meiner Meinung nach an, weil
    1. eine obere Schranke für die Anzahl der Elemente existiert.
    2. sehr oft lesend auf Elemente zugegriffen wird (Performanz).
    3. die Datenstruktur in den meisten Fällen bis zur oberen Schranke gefüllt sein wird (soll ja eine Queue werden). Ein Speicheroverhead wird dadurch wahrscheinlich eher selten vorkommen.
    4. auf die Objekte über ihre Indizes zugegriffen werden soll (im Array extrem leicht zu implementieren).
  • Das FIFO-Prinzip auf jeden Fall mit Ringspeicher und Zeiger implementieren! Das ist wesentlich einfacher und performanter, als die Elemente herumzuschieben. Bei Anfragen nach dem n-ten Element nimmst Du den Modulo-Operator.
  • Threadsicherheit mit synchronized-Methoden herstellen. Hier muss ich zugeben, dass ich mich da selbst nicht so gut auskenne, aber dieses Kapitel schien mir sehr Reich an verschiedenen Methoden zur absicherung parallelisierter Programme.
 

Rol

Aktives Mitglied
Hallo Rol,
Das FIFO-Prinzip auf jeden Fall mit Ringspeicher und Zeiger implementieren! Das ist wesentlich einfacher und performanter, als die Elemente herumzuschieben. Bei Anfragen nach dem n-ten Element nimmst Du den Modulo-Operator.
Bist Du sicher? Einfügen und somit verschieben muss ich nur 1x pro ca. 100.000 Leseoperationen. Bei jeder Leseoperation muss dann per Modulo-Operator der Arrayindex umgerechnet werden. Ich habe da eben kein Gefühl was die größere Performance Bremse wäre...
 

obb

Mitglied
Das ganze soll eine Art Simulationsprogramm werden, d.h. durch die Datenstruktur werden sehr viele male sehr viele (Mio.) Objekte "durchgeschoben".
Sei n die größe des Arrays. Bei n = 500 und 1.000.000 eingespeisten Objekten wird die Queue während ihrer Lebenszeit 2000 Mal neu gefüllt. Ab dem 500. Objekt gilt: Für jedes weitere Objekt, das eingefügt wird, musst Du 499 Objekte verschieben. Das macht dann 498.750.500 Verschiebungsoperationen während der Lebenszeit eines Objekts.​
Das Verhältnis von Lesen zu Schreiben ist 100.000:1. Daraus folgt, dass das Verhältnis von Lesen zu Verschiebungsoperation ca. 1:4.987 ist. Pro lesendem Zugriff auf die Datenstruktur machst Du also knapp 5.000 Verschiebungen, wenn ich mich nicht verrechnet habe.​
Mit dem Ringspeicher bildest Du pro lesendem Zugriff eine Summe und führst eine Modulooperation über dem Ergebnis dieser Summe aus. Die Summe ist bei n = 500 maximal 998. Das scheint mir insgesamt kostengünstiger als die andere Vorgehensweise.​
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Und wenn man ein Interface verwendet, kann man schnell ein paar mögliche Implementierungen durchprobieren, und sieht, welche wirklich im konkreten Anwendungsfall die beste ist...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Q SMS basierte Applikationen, welche Programmiersprache? Java Basics - Anfänger-Themen 8
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
FelixN Teilsummenproblem / welche Datenstruktur Java Basics - Anfänger-Themen 2
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
W Welche Komponente ist geeignet? Java Basics - Anfänger-Themen 1
A Welche Operation ist das? Java Basics - Anfänger-Themen 2
J Welche Java-Version installieren Java Basics - Anfänger-Themen 9
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
K GUI Entwicklung - Welche Richtung passt für euch zum mobilen Zeitalter? Java Basics - Anfänger-Themen 4
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Welche Verteilung? Java Basics - Anfänger-Themen 1
L Welche Methode? Java Basics - Anfänger-Themen 7
O Methoden welche ich implementier Java Basics - Anfänger-Themen 11
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
M JDK installieren Welche Software bei XP? Java Basics - Anfänger-Themen 5
H Welche IDE zum Buch "Programmieren mit Java" von Reinhard Schiedermeier des Verlags Pearson Studium Java Basics - Anfänger-Themen 19
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
M Welche Entwicklungsumgebung? Java Basics - Anfänger-Themen 32
I Welche Schleife/Bedingung nehme ich her Java Basics - Anfänger-Themen 5
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
K Erste Schritte Java lernen - Welche Bücher? Java Basics - Anfänger-Themen 1
P welche Komponente ist im Layout? Java Basics - Anfänger-Themen 2
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
G Lambda Ausdruck: Welche Methode ist die Richtige? Java Basics - Anfänger-Themen 1
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
A Klassen welche Klassen importiert Eclipse automatisch Java Basics - Anfänger-Themen 2
V welche Methode am besten sich für JPG einfügung in Java anzugewöhnen ? Java Basics - Anfänger-Themen 4
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
I Grafische Benutzeroberflächen - welche Komponente nehme ich am besten? Java Basics - Anfänger-Themen 13
G Welche JAVA IDE? Java Basics - Anfänger-Themen 3
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
K Welche Java Version ist die richtige Java Basics - Anfänger-Themen 3
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
C Datenbank - Welche Java Basics - Anfänger-Themen 5
S Welche Art von Liste? Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
T Welche Schleife? Java Basics - Anfänger-Themen 6
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
P Vererbung herausfinden welche Klasse was erbt Java Basics - Anfänger-Themen 3
K welche art von Liste für TableModell Java Basics - Anfänger-Themen 2
D Welche API für komplexe XML-Struktur? Java Basics - Anfänger-Themen 25
S welche Programmstruktur? Java Basics - Anfänger-Themen 8
M Welche Datenbank? Java Basics - Anfänger-Themen 5
B Welche Themengebiete benötige ich? Java Basics - Anfänger-Themen 7
StupidAttack Gson, welche Datenstruktur? Java Basics - Anfänger-Themen 4
S Welche Collection kann sich selber sortieren? Java Basics - Anfänger-Themen 8
H Welche Art der Ein/Ausgabe Java Basics - Anfänger-Themen 2
D Welche Datenstruktur für welche Problemstellung? Java Basics - Anfänger-Themen 10
U Welche(s) Framework(s) wären geeignet? Java Basics - Anfänger-Themen 8
StrikeTom Welche Dateitypen unterstützt JMF (Java Media Framework)? Java Basics - Anfänger-Themen 6
S Welche Collection? Java Basics - Anfänger-Themen 5
A Welche UML Software benutzt ihr / ist empfehlenswert? Java Basics - Anfänger-Themen 2
N Welche Datenstukturen und Methoden Java Basics - Anfänger-Themen 3
L Auswahl auf welche Art gespeichert werden soll Java Basics - Anfänger-Themen 6
B Welche Java-Installation ist aktiv? Java Basics - Anfänger-Themen 2
B Finden gemeinsamer Kanten: welche Datenstruktur ? Java Basics - Anfänger-Themen 9
S Welche möglichkeiten gibt es eine Zahl zu spiegeln? Java Basics - Anfänger-Themen 17
U Welche Seite für Anfänger Java Basics - Anfänger-Themen 11
K Welche Entwicklungsumgebung für Einsteiger? Java Basics - Anfänger-Themen 16
S Webapplikation welche alternative zu gwt? Java Basics - Anfänger-Themen 2
cowabunga1984 Unit-Testing - Welche Testfälle sind relevant? Java Basics - Anfänger-Themen 4
S Welche Methode in JFrame überschreiben? Java Basics - Anfänger-Themen 12
H Designfrage: Welche Liste? Java Basics - Anfänger-Themen 3
Z Welche IO-Klasse verwenden? Java Basics - Anfänger-Themen 2
G Welche Datenstruktur ( Sets / Maps)? Java Basics - Anfänger-Themen 10
M Der Java Schlüsselwort null; ?Welche Anweisung und Sinn? Java Basics - Anfänger-Themen 12
G Herausfinden, welche Componente als LETZTES focus hatte Java Basics - Anfänger-Themen 2
H Welche PDF Biblothek? Java Basics - Anfänger-Themen 6
G Variable welche in anderer Klasse liegt, verändern. Java Basics - Anfänger-Themen 2
G Frage:Welche Methodne kann man eine Zahl bzw. ein String Java Basics - Anfänger-Themen 3
U Welche Datenstruktur soll ich nehmen? Java Basics - Anfänger-Themen 11
K Welche Exception? Java Basics - Anfänger-Themen 6
G Welche Datenstruktur ist hier die sinnvolste Java Basics - Anfänger-Themen 6
G welche Teile der api sind wichtig? Java Basics - Anfänger-Themen 3
K Welche methoden gibt es in Java um Zahlen von der Java Basics - Anfänger-Themen 11
G welche Java-Technologie für JDBC geeignet Java Basics - Anfänger-Themen 6
G Welche Programmiersprache für ein Betriebssystem? Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben