Hallo.
Bin zur Zeit dabei meinen Code etwas zu überarbeiten und da habe ich an vielen Stellen Integers verwendet, obwohl viel kleinere Zahlenbereiche auch reichen, daher verwende ich zum Teil sogar nur noch bytes. Ein anderer Punkt war, dass mir mal jemand sagte, dass Enumerations nicht so effizient sind. Immer wenn ich verschiedene Typen von irgendetwas habe, nehme ich meistens eine Enumeration. Ich habe z.B. für die Blickrichtung eines Spielers Folgendes:
Der Player besitzt dann eben ein Attribut vom Typ FacingDirection.
Ich frage mich nur wie effizient das ist, also wie wird so eine Enumeration intern repräsentiert?
Letztendlich geht es mir ja nur darum, dass ich da ein Wort reinschreiben kann, was ich verstehe.
Daher hatte ich noch folgenden Ansatz:
Da ich später Kryonet zur Dateiübertragung nutze, würde mich mal interessieren was nun effizienter ist. Ein Attribut vom Typ FacingDirection oder ein Attribut vom Typ byte.
Selbst 1 Byte ist ja schon zuviel, im Prinzip würden 2 Bit ja auch reichen, sodass UP = 00, RIGHT = 01, DOWN = 01 und LEFT = 11 ist. Intern soll es eben möglichst effizient gemacht werden, mir gehts nur darum, dass ich dem Attribut des Spielers später nicht irgendeine komische Zahl zuweise, sondern dann eben FacingDirection.UP verwenden kann o.Ä... Kann ich ja auch so, nur was ist effizienter?
Des Weiteren habe ich gelesen, dass ein EnumSet intern als Bitvektor repräsentiert wird und es dadurch extrem kompakt und effizient ist ( EnumSet (Java Platform SE 7 ) ).
Macht es Sinn einen Bitvektor irgendwie mithilfe eines EnumSets zu repräsentieren ( was ja intern ohnehin ein Bitvektor ist )? Welche Größe besitzt der Bitvektor dann? Ansonsten würde ich eben eine Klasse Bitvector ( oder so ähnlich ) schreiben die als Attribut einen Integer hat ( ein Integer hat ja 32 Bit ), das wäre dann sozusagen mein Bitvektor, den ich dann mit den Shiftoperatoren und den Operatoren "Und" und "Oder" bearbeiten kann ( da würde ich mir natürlich schöne Methoden schreiben ).
Ich will eben die effizienteste Repräsentation für meine Daten finden, weil ich gerade dabei bin ein Spiel Netzwerkfähig zu machen und Kryonet erlaubt es mir ja ganz einfach Objekte zu senden.
Danke schonmal für eure Zeit!
Jan
Bin zur Zeit dabei meinen Code etwas zu überarbeiten und da habe ich an vielen Stellen Integers verwendet, obwohl viel kleinere Zahlenbereiche auch reichen, daher verwende ich zum Teil sogar nur noch bytes. Ein anderer Punkt war, dass mir mal jemand sagte, dass Enumerations nicht so effizient sind. Immer wenn ich verschiedene Typen von irgendetwas habe, nehme ich meistens eine Enumeration. Ich habe z.B. für die Blickrichtung eines Spielers Folgendes:
Java:
public enum FacingDirection
{
UP, RIGHT, DOWN, LEFT
}
Ich frage mich nur wie effizient das ist, also wie wird so eine Enumeration intern repräsentiert?
Letztendlich geht es mir ja nur darum, dass ich da ein Wort reinschreiben kann, was ich verstehe.
Daher hatte ich noch folgenden Ansatz:
Java:
public class FacingDirection
{
public static final byte UP = 0;
public static final byte RIGHT = 1;
public static final byte DOWN = 2;
public static final byte LEFT = 3;
}
Selbst 1 Byte ist ja schon zuviel, im Prinzip würden 2 Bit ja auch reichen, sodass UP = 00, RIGHT = 01, DOWN = 01 und LEFT = 11 ist. Intern soll es eben möglichst effizient gemacht werden, mir gehts nur darum, dass ich dem Attribut des Spielers später nicht irgendeine komische Zahl zuweise, sondern dann eben FacingDirection.UP verwenden kann o.Ä... Kann ich ja auch so, nur was ist effizienter?
Des Weiteren habe ich gelesen, dass ein EnumSet intern als Bitvektor repräsentiert wird und es dadurch extrem kompakt und effizient ist ( EnumSet (Java Platform SE 7 ) ).
Macht es Sinn einen Bitvektor irgendwie mithilfe eines EnumSets zu repräsentieren ( was ja intern ohnehin ein Bitvektor ist )? Welche Größe besitzt der Bitvektor dann? Ansonsten würde ich eben eine Klasse Bitvector ( oder so ähnlich ) schreiben die als Attribut einen Integer hat ( ein Integer hat ja 32 Bit ), das wäre dann sozusagen mein Bitvektor, den ich dann mit den Shiftoperatoren und den Operatoren "Und" und "Oder" bearbeiten kann ( da würde ich mir natürlich schöne Methoden schreiben ).
Ich will eben die effizienteste Repräsentation für meine Daten finden, weil ich gerade dabei bin ein Spiel Netzwerkfähig zu machen und Kryonet erlaubt es mir ja ganz einfach Objekte zu senden.
Danke schonmal für eure Zeit!
Jan