Designfrage: Viele, kleine Objekte

Status
Nicht offen für weitere Antworten.

tincup

Bekanntes Mitglied
Hi.

Ich entwickle grade an einer Bibliothek (soll also auch mal von anderen Programmierern genutzt werden), welche unter anderem eine Container-Klasse mit Zahlenpaaren enthält. Diese Zahlenpaare können in großer Zahl auftreten (50-100.000) und stellen an sich auch diskrete Objekte dar (sagen wir mal "Datensätze"), welche über die Containerklasse auch z.B. einzeln ausgelesen werden können.

Jetzt ist die Frage, was für einen Datentyp sollte man verwenden. Irgendwie scheint es mir "zuviel", wenn ich dafür extra wieder eine eigene Klasse erstelle, wo dann zwei Zahlen drinstehen. Einfacher wäre vielleicht ein int[] der Größe 2. Ist sicher hässlich, aber effizienter. Oder auch nicht, weil Arrays in Java auch Objekte sind?

Hat jemand da vielleicht eine Meinung oder generell ein paar Gedanken zu?

Grüsse,
Tin
 

Backwardsman

Bekanntes Mitglied
wie groß bzw. klein kann so eine einzelne zahl denn werden!? wird der ganze int-bereich ausgenutzt? wenn nicht, könnte man bestimmt was optimieren... aber so wie es sich anhört würde ich zu einem int-array tendieren, ein extra objekt für ein zahlenpaar wäre wohl etwas too much ;-)
 

tincup

Bekanntes Mitglied
Danke schonmal für die Antwort.

OK am konkreten nativen Datentyp könnte man sicher optimieren. Aber generell scheint das mit dem int[] ziemlich hässlich, irgendsone Methode
int[] getRecord(...)

Die dann was zurückgibt mit der Konvention, arr[0] ist der erste und arr[1] der zweite Wert. Nicht so ganz Java-like, und doch insbesondere schlecht, wenn man den Code nicht nur für interne Zwecke benutzt, oder?
 

Backwardsman

Bekanntes Mitglied
naja, was heißt denn "hässlich"!? welche anderen möglichkeiten hast du denn (welche nicht auf objekten abgesehen von arrays basiert)? ein int-array wird da immer noch das "maschinennaheste" sein.

und wer will denn gleich die ganze liste haben? das packt man schön in ein objekt, von welchem man sich dann einzelne einträge geben lassen kann, bzw. funktionalitäten wie sortieren, vergleichen etc. anbietet.

kannst natürlich auch schon einen baum oder ähnliches implementieren, dann ist es vielleicht "schön", aber halt eben overkill.

insgesamt müsste man einfach mehr wissen worum es geht, was das für daten sind, was damit gemacht werden kann und soll... sonst kann man solche entscheidungen gar nicht treffen!
 

tincup

Bekanntes Mitglied
Ich muss leider gestehen, dass ich mich mit Designpatterns nicht sehr gut auskenne. Ich mache sowas meist so aus dem Gefühl heraus (Asche auf mein Haupt).

Nach einigem Nachdenken (der erste Post ist zwar nicht lange her, aber seither hab ich mir alles mögliche überlegt :D ) denke ich, dass ich folgenden Ansatz benutzen werde:

Ich speichere die Paare intern als großes, eindimensionales int[] Array, dieses sollte die größtmögliche Performance haben. Ein paar ist dann entsprechend an den indizies i und i+1 für ganze Zahlen i. Falls der Benutzer sich einzelne Interaktionen rausholt (das passiert wahrscheinlich nicht so häufig) extrahiere ich den Kram und packe ihn wohl doch in einen entsprechenden Container ODER gebe ihn als ähnlich aufgebautes Array zurück.

Hab mal kurz nach diesem Fliegengewicht Pattern geschaut, auf die schnelle habe ich gefunden:
Nutze Objekte kleinster Granularität gemeinsam, um grosse Mengen von ihnen effizient verwenden zu können.
Ich denke mal, mein Ansatz geht etwa in diese Richtung.

Danke nochma. Grüsse,
Tin
 

Wildcard

Top Contributor
tincup hat gesagt.:
Ich muss leider gestehen, dass ich mich mit Designpatterns nicht sehr gut auskenne. Ich mache sowas meist so aus dem Gefühl heraus (Asche auf mein Haupt).
Das solltest du ändern.
Wenn ein halbwegs erfahrener Entwickler sein erstes Buch über Patterns liest, wird er feststellen das er vieles davon schon intuitiv getan hat. Ebenfalls wird er feststellen, dass das echte Pattern meist noch eine Spur besser/flexibler als seine Lösung ist.
Davon abgesehen hat es Vorteile dem Kind einen Namen geben zu können, das erhöht das Verständnis im Team.
 

Marco13

Top Contributor
Irgendwie sehe ich kaum einen Grund, dafür KEINE eigene Klasse zu erstellen (Zumal ein Array auch ein echtes Objekt ist). Eine Klasse "Tuple2i" vielleicht, die dann auch schicke equals- hashCode und toString-Methoden anbieten könnte...!? Wenn es brutalst um Performance gehen würde, würde man nicht viele 2-arrays nehmen, sondern einen großen Array, und mit passenden indizes drauf zugreifen ....
 

Backwardsman

Bekanntes Mitglied
Marco13 hat gesagt.:
Wenn es brutalst um Performance gehen würde, würde man nicht viele 2-arrays nehmen, sondern einen großen Array, und mit passenden indizes drauf zugreifen ....
also mich würde es schon sehr wundern, wenn das was bringen würde... intern wird ein 2 dimensionlaer int-array doch nicht anders im speicher abgelegt als ein 1 großer dimensionaler nur dass halt die jmv die adressierung übernimmt...
 

tincup

Bekanntes Mitglied
Bei vielen kleinen 2-Arrays hat man halt das Problem des Objekterstellungs-Overhead, würde ich sagen.

Danke schonmal für die Buchtipps, eins von den beiden werde ich mir wohl bezeiten mal zulegen müssen.
 

Marco13

Top Contributor
Nun - wie der Speicher eines 2D-int-arrays aussieht, weiß fast niemand.... Zumindest kann man mit ziemlicher Sicherheit davon ausgehen, dass ein 1D-Array in einem einzelnen Block liegt, aber man kann sicher NICHT davon ausgehen, dass ein 2D-Array in einem "1D"-Block liegt, der nur anders adressiert wird. Spätestens bei
Code:
int a[][] = new int[]{ {1,2}, {3,4}, {5,6} };
int b[][] = new int[]{ a[2], a[0], a[1] };
kann ja zwangsläufig einer von beiden NICHT als zusammenhängender Speicherblock vorliegen :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
L Designfrage: Dispatcher-Programmierung - redundante Auslegung Allgemeine Java-Themen 1
F.S.WhiTeY Designfrage bzw. Meinung zur Umsetzung Allgemeine Java-Themen 39
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
G Designfrage: Exceptions in Konstruktoren Allgemeine Java-Themen 7
E Wie anfangen? Konzept / Designfrage Allgemeine Java-Themen 17
heart_disease Designfrage: Statische Konfigurationsklasse Allgemeine Java-Themen 10
sliwalker Designfrage: Dateninhalte in Komponenten variabel halten Allgemeine Java-Themen 4
N DesignFrage FactoryPattern Allgemeine Java-Themen 7
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2
A Designfrage zu Dateimanager Allgemeine Java-Themen 4
O Designfrage Allgemeine Java-Themen 6
T Designfrage: Audiochat Allgemeine Java-Themen 3
S Designfrage Allgemeine Java-Themen 3
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
Tacofan Hangman so viele Labels wie Buchstaben Allgemeine Java-Themen 5
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
E Beliebig viele Worte Allgemeine Java-Themen 5
G Methoden Unterschiedliche viele Parameter Allgemeine Java-Themen 17
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
H Sehr viele Threads effizient Verwalten Allgemeine Java-Themen 13
R Arrayausgabe enthält viele Leerzeichen Allgemeine Java-Themen 4
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
C Threads Verbraucht eine Zeitabfrage viele Rechen-Ressourcen? Allgemeine Java-Themen 8
J BlueJ Methode hat zu viele Parameter Allgemeine Java-Themen 6
D (Viele) Daten performant speichern und lesen Allgemeine Java-Themen 5
S Viele zip-files zu einem kombinieren..? Allgemeine Java-Themen 3
KrokoDiehl Viele JARs und deren Resourcen Allgemeine Java-Themen 9
S Zu viele Felder. Allgemeine Java-Themen 4
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
O viele Datensätze aus Datenbank - Java Heap Space - Excepion Allgemeine Java-Themen 25
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
T viele Threads Allgemeine Java-Themen 14
M Beliebig viele Typen bei Generics Allgemeine Java-Themen 3
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
V 1 Methode für viele verschiedene Klassen? Allgemeine Java-Themen 9
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
K Zu viele Threads -> langsamer angehen. Allgemeine Java-Themen 3
N kleine Kommazahlen erscheinen plötzlich Allgemeine Java-Themen 19
T Kniffel: kleine Straße Allgemeine Java-Themen 6
I GUI für kleine Pop-Ups unter Windows Allgemeine Java-Themen 1
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
Soloeco Kleine Optimierungsfrage Allgemeine Java-Themen 6
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
vandread Kleine Generics Aufgabe aus einer Prüfung... wie ist das gemeint? Allgemeine Java-Themen 6
Y Kleine Frage zu String.split Allgemeine Java-Themen 3
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
D Kleine Frage zum öffnen eines Fensters Allgemeine Java-Themen 10
A Drucken auf kleine Formate Allgemeine Java-Themen 2
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
musiKk Best Practice für kleine Variationen in gegebenen Modellklassen Allgemeine Java-Themen 11
nrg Kleine Hilfe mit RegEx Allgemeine Java-Themen 2
L Kleine Rekursion Allgemeine Java-Themen 12
B Kleine Frage zu Modellierung (Videothek) Allgemeine Java-Themen 2
J Eine kleine Aufnahme mit Java Allgemeine Java-Themen 3
J Kleine Hilfe zum Framework Click Allgemeine Java-Themen 2
Lulumann6 kleine frage zu KeyEvents Allgemeine Java-Themen 10
G Kleine Frage zu Vectoren Allgemeine Java-Themen 2
D kleine SQL-Hilfe benötigt: not a single-group group function Allgemeine Java-Themen 4
M Schnell kleine Hilfe gesucht! Allgemeine Java-Themen 3
T kleine mp3 Lib Allgemeine Java-Themen 17
K Mit Java kleine Freeware Programme erstellen. Geht das? Allgemeine Java-Themen 16
L kleine frage zum rechner Allgemeine Java-Themen 7
V kleine Threadfrage Allgemeine Java-Themen 10
T Kleine Verständnisfrage zu Stringbuffer Allgemeine Java-Themen 2
K Kleine Exception Frage ! Allgemeine Java-Themen 3
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben