Optionale Komponenten

Hallo liebe Community,

ich programmiere gerade ein kleine Spiel und habe folgende Frage:

Ich möchte einem Player per "playerName.add(new Komponente())" eine selbst programmierte Komponente (Schwert, Lebensanzeige, sonst was) hinzufügen können. Dies soll aber optional sein. Muss also nicht gemacht werden.

Wenn ich in der Player-Klasse aber schreibe:
"Komponente komp;" und ich dann aber keine hinuzufüge (durch .add), dann wird doch aber trotzdem der Speicher für eine Komponente "reserviert" oder? Also unnötiger weise. Gerade wenn es um mehrere mögliche Komponenten geht wird das blöd, wenn Speicher unnötig reserviert wird. Kann man das nicht irgendwie so lösen, dass der Player nur dann eine Komponente hat, wenn man explizit eine addet?

Konntet Ihr mir da helfen?
 

InfectedBytes

Top Contributor
Nein, es wird nur Speicher für eine Referenz reserviert (also 32 oder 64 Bit).
Der Speicher für die eigentliche Komponente wird erst reserviert, wenn ein Objekt der Komponente erzeugt wird.
 

Tom299

Bekanntes Mitglied
Wie sieht es damit aus
Java:
    private ArrayList<String> listA;
    private ArrayList<String> listB = new ArrayList<String>(0);

wird bei listB mehr reserviert oder nicht?
 

InfectedBytes

Top Contributor
Ja, da:
listA ist momentan nur eine Referenz (auf null) und kostet nur 32 bzw 64 Bit.
listB ist eine Referenz auf ein konkretes Objekt (32/64 Bit für Referenz) plus die Größe einer ArrayList.
Die ArrayList wird erstmal eine feste Menge an Speicher verbrauchen (keine Ahnung wieviel genau), intern speichert sie die elemente relativ effizient in einem Array. Durch das hinzufügen von Elementen wächst der Speicherverbrauch der Liste.
 

Tom299

Bekanntes Mitglied
Ok, das war auch mein Gedanke, wollte nur wissen, ob ich richtig liege :D
Wenn ich aber ohne 0 initialisiere, werden glaub ich defaultmäßig 10 Plätze für die ArrayList beansprucht, also macht das initialisieren mit 0 schon Sinn, oder lieg ich da falsch?
 

InfectedBytes

Top Contributor
ich glaube 16 ist die Standardgröße, aber egal^^

Es macht nur Sinn, wenn zu erwarten ist, dass die ArrayList leer bleibt.
Wenn du aber relativ schnell 20 elemente hinzufügst, wäre es besser gewesen sie mit 20 zu initialisieren.
Allgmein sollte die Liste mit einem Wert initialisiert werden, welcher "vermutlich" schnell erreicht wird, oder welcher "meistens" benötigt wird.
 

Tom299

Bekanntes Mitglied
Hmmm, ich bin dazu übergegangen, immer alles mit 0 zu initialisieren, dachte das wäre vorteilhaft. Grad bei DB-Abfragen weiß man ja nie, wieviel Zeilen man bekommt, manchmal ja auch keine, 1 oder 2-3.
 

InfectedBytes

Top Contributor
Die Sache ist halt, das ArrayList intern ein Array benutzt. Wenn dieses Array voll ist, wird ein neues, größeres Array erzeugt und alles von dem kleinen ins große Array kopiert. Anschließend wird dann das kleine Array wieder freigegeben.
Wenn das interne Array voll ist, wird Standardmäßig ein etwa 50% größeres Array erzeugt.
Java:
int newCapacity =(oldCapacity *3)/2+1;
Wenn du dein Array also mit 0 initialisierst und nach und nach immer wieder einzelne Elemente hinzufügst, muss das Array also unnötig oft "wachsen".
Startgröße -> neue Größe
0 -> 1 -> 2 -> 4 -> 7 -> 11 -> 17 -> 26 -> ...
Wenn man beispielsweise nach und nach 20 Elemente einfügt, muss das Array 7 mal neu erzeugt und rüberkopiert werden.

Ergo: Wenn möglich sollte man die ArrayList mit der zu erwartenden größe initialisieren
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Optionale Funktionsparameter? Java Basics - Anfänger-Themen 4
A Optionale Übergabewerte Java Basics - Anfänger-Themen 14
D Komponenten, Module, Begrifferklärung Java Basics - Anfänger-Themen 4
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
C Einbinden von Komponenten mit Maven Java Basics - Anfänger-Themen 3
V Alle Komponenten eines JPanels Java Basics - Anfänger-Themen 14
M GUI- mehrere Komponenten auf Container adden Java Basics - Anfänger-Themen 2
P JavaFX - Komponenten skalieren Java Basics - Anfänger-Themen 16
J Klassen Hilfe bei unbekannten Zeilen bzgl. Klassen / Komponenten Java Basics - Anfänger-Themen 12
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
N JTable - Zellfarben ändern, GUI-Komponenten in Zellen einfügen Java Basics - Anfänger-Themen 5
M Komponenten irgendwo versteckt? Java Basics - Anfänger-Themen 7
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
MU5T4NG Komponenten in Schleife ansprechen Java Basics - Anfänger-Themen 13
B Tabelle, Größe der Komponenten Java Basics - Anfänger-Themen 2
D Wie genau kann ich in Java Komponenten entwickeln? Java Basics - Anfänger-Themen 6
P Scrollpane mit dynamisch erzeugten Komponenten Java Basics - Anfänger-Themen 3
M Fixe Position von GUI Komponenten ? Java Basics - Anfänger-Themen 9
Weiti Anzeige von komponenten erst bei Mouse-Over Java Basics - Anfänger-Themen 3
N Anordnug der Komponenten mit NetBeans Java Basics - Anfänger-Themen 9
M Obsolete Komponenten feststellen? Java Basics - Anfänger-Themen 3
X GridBagLayout Komponenten Anordnungsproblem Java Basics - Anfänger-Themen 4
L Komponenten in Layoutmanagern zentrieren Java Basics - Anfänger-Themen 5
J Probleme mit Visual Editor Komponenten auf Panel legen Java Basics - Anfänger-Themen 4
J Komponenten andordnen Java Basics - Anfänger-Themen 2
K Koordinaten von Swing Komponenten Java Basics - Anfänger-Themen 2
G Komponenten Java Basics - Anfänger-Themen 2
A Komponenten nur sporadisch sichtbar beim starten Java Basics - Anfänger-Themen 2
I Swing-Komponenten-Größe im GridBagLayout beschränken Java Basics - Anfänger-Themen 2
N GridBagLayout: gleichmäßige verteilung von Komponenten Java Basics - Anfänger-Themen 23
S Auf JButtonBar komponenten ausrichten, größe festlegen? Java Basics - Anfänger-Themen 5
S Wie komponenten positionieren? Java Basics - Anfänger-Themen 6
B Komponenten im LayoutManager zentrieren Java Basics - Anfänger-Themen 5
G Seit Java6 wird der Text von komponenten komisch dargestellt Java Basics - Anfänger-Themen 11
Q Beste Komponenten für 3-Schichten-Architektur gesucht Java Basics - Anfänger-Themen 7
T Anderes Fenster öffnen, darin enthaltene Komponenten ändern Java Basics - Anfänger-Themen 2
E Komponenten auf Panel positionieren Java Basics - Anfänger-Themen 3
S Komponenten löschen und ersetzen Java Basics - Anfänger-Themen 2
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
P Abstand vom Rahmen zu Komponenten bestimmen? Java Basics - Anfänger-Themen 3
J Dynamische Größenveränderung der Komponenten verhindern Java Basics - Anfänger-Themen 8
S Alle Komponenten die ich auf die IDE ziehe sind align all Java Basics - Anfänger-Themen 7
B Komponenten einer Zeile, Spalte des GridLayouts hinzufügen Java Basics - Anfänger-Themen 3
M value von Komponenten erhalten Java Basics - Anfänger-Themen 3
G GUI Komponenten Java Basics - Anfänger-Themen 14
M Problem beim ändern von Komponenten während Visible(true) Java Basics - Anfänger-Themen 4
M Bei Swing Komponenten die Farbe ändern? Java Basics - Anfänger-Themen 12
S Benennung von Komponenten bei Swing? Java Basics - Anfänger-Themen 8
J von Methode auf GUI-Komponenten zugreifen? Java Basics - Anfänger-Themen 5
J Problem mit Swing-Komponenten Java Basics - Anfänger-Themen 13
G Visuellen Komponenten Hints zuordnen Java Basics - Anfänger-Themen 5
G Komponenten dynamisch auf contentPane einbinden Java Basics - Anfänger-Themen 5
M wie kombiniere ich grafik und swing-komponenten Java Basics - Anfänger-Themen 16
X Komponenten automatisch erzeugen Java Basics - Anfänger-Themen 8
X Viele Komponenten automatisch erzeugen Java Basics - Anfänger-Themen 2
sambalmueslie Probleme mit Container und Komponenten. Java Basics - Anfänger-Themen 3
A Komponenten im Panel ausrichten Java Basics - Anfänger-Themen 5
M GridBagLayout und enthaltende komponenten Java Basics - Anfänger-Themen 5
G alle Komponenten vom Typ JPanel removen Java Basics - Anfänger-Themen 4
K Sichtbarkeit von Komponenten prüfen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben