2016-06-16 5 views
0

Ich versuche, eine Klasse mit schreiben, so dass ich einen Ring-Puffer beliebiger Art von Daten implementieren kann. Es gibt zwei Möglichkeiten, die ich gerade sehe. Zuerst erstelle ich eine Klasse mit Generics, wobei der generische Typ verwendet wird, um den Array-Typ zu bestimmen, den ich für den Ringpuffer initialisieren möchte. Hier müsste ich das Array der class verwenden. Zweitens erstelle ich eine abstrakte Basisklasse, die die gemeinsamen Komponenten definiert, und erweitere diese Klasse für die Implementierung verschiedener Typen von Puffern, die ich verwenden möchte. Zum Beispiel, wenn ich eine Instanz von Ringpuffer des Typs int erstellen möchte, kann ich es in der Implementierung meines Kindes class erstellen. Hier kann ich die primitive datatypes verwenden, um die Arrays zu erstellen. Meine Anwendung ist in Echtzeit und würde in Echtzeit auf diese Puffer zugreifen. Also würde ich gerne wissen, welches eine effiziente Lösung ist.Was ist besser? Mit einem Array von primitiven Typ eines Arrays der entsprechenden Klasse

+1

Der Leistungseinfluss durch Boxing- und Unboxing-Klasseninstanzen von Primitiven kann ziemlich groß sein, und es ist nicht sicher, ob sie durch JIT zuverlässig optimiert werden kann, um Boxen in allen Fällen zu eliminieren. – hexafraction

+0

Wenn Sie möchten, dass es für * alle * Datentypen generisch ist, müssen Sie Boxed-Primitive verwenden, da Sie Primitive in Generics nicht verwenden können (Sie * können jedoch primitive Arrays verwenden). –

+0

Also, wäre es besser, meine eigene Klasse von boxed 'int' Typ zu erstellen, anstatt den' Java.Lang.Integer' zu verwenden? Was wären die Leistungspunkte gegenüber der Verwendung der "primitiven Datentypen"? – Swapnil

Antwort

2

Der zweite Ansatz wird besser funktionieren, da Unboxing und (insbesondere) Autoboxing einen Leistungseinbruch haben.

Die Kollektionen werden auch einen wesentlich kleineren Speicherbedarf haben, das ist ein weiterer Vorteil.

Diese Gründe sind warum Sammelrahmen wie GS Collections (jetzt Eclipse Collections ich glaube) und Guava primitive Implementierungen ihrer Sammlungen enthalten.

Der Nachteil ist, dass Sie mehr Code haben, um im Voraus zu schreiben, und Sie werden nicht eine einzige Klasse haben, die unter allen Umständen verwendet werden kann.

+0

Da ich dies nicht für viele Datentypen in meinem System implementieren muss, denke ich, dass ich die 'primitiven Typen' verwenden werde. – Swapnil

Verwandte Themen