Verwendung kleiner (1–10 Elemente) Sammlungen auf Instanzebene in Java
-
09-06-2019 - |
Frage
Beim Erstellen von Klassen in Java erstelle ich häufig Sammlungen auf Instanzebene, von denen ich im Voraus weiß, dass sie sehr klein sein werden – weniger als 10 Elemente in der Sammlung.Da ich die Anzahl der Elemente jedoch nicht im Voraus kenne, entscheide ich mich normalerweise für eine dynamische Sammlung (ArrayList, Vector usw.).
class Foo
{
ArrayList<Bar> bars = new ArrayList<Bar>(10);
}
Ein Teil von mir nörgelt immer wieder, dass es verschwenderisch sei, komplexe dynamische Sammlungen für etwas so Kleines zu verwenden.Gibt es eine bessere Möglichkeit, so etwas umzusetzen?Oder ist das die Norm?
Beachten Sie, dass ich keine (spürbaren) Leistungseinbußen oder ähnliches erleide.Ich frage mich nur, ob es nicht einen besseren Weg gibt, Dinge zu erledigen.
Lösung
Die ArrayList
Klasse in Java hat nur zwei Datenelemente, einen Verweis auf ein Object[]
Array und einen größe, die Sie sowieso benötigen, wenn Sie keinen ArrayList
verwenden. So ist der einzige Vorteil eines ArrayList
nicht mit spart eine Objektzuordnung, die immer unwahrscheinlich ist eine große Sache zu sein.
Wenn Sie erstellen und Entsorgung von vielen, vielen Instanzen Ihrer Container-Klasse (und durch Erweiterung Ihrer ArrayList
Instanz) jede Sekunde Sie Macht haben ein kleines Problem mit der Garbage Collection Churn-aber das ist etwas zu befürchten, wenn es jemals auftritt. Garbage Collection ist in der Regel die wenigsten Sorgen.
Andere Tipps
Aus Gründen der Dinge einfach zu halten, ich denke, das so ziemlich kein Thema ist. Ihre Implementierung ist flexibel genug, dass, wenn die Anforderungen in der Zukunft ändern, Sie sind nicht in ein Refactoring gezwungen. Auch mehr Logik zu Ihrem Code hinzufügen nur für eine Hybrid-Lösung ist es nicht wert Berücksichtigung Ihre kleine Datensatz zu nehmen und die hohe Qualität der Java API Sammlung.