Hallo!
Ich könnte schwören, dass es bestimmt irgendwo das Problem gibt, habe vorher selber schon Google befragt, aber keine passende Lösung gefunden. Beispiel:
Java:
int[] iArray =newint[5];
Hat eine feste Größe von 5.
Java:
ArrayList<Typ> al =newArrayList<Typ>(5);
Wieso ist die Größe hier von der ArrayList immer noch 0?
Müsste das nicht auch dann 5 sein?
Falls nicht -> gibt's eine einfachere Möglichkeit als eine Schleife zu nehmen und ständig al.add(new Typ()); ?
Der Parameter bei der ArrayList ist die initiale Kapazität, d.h. die Maximalgröße, bevor die ArrayList automatisch vergrößert wird.
Ein Array hat während seiner kompletten Lebenszeit eine fixe Größe. Eine ArrayList passt sich während der Laufzeit dynamisch an den Größenbedarf an. Wenn du weißt, dass in deine List sehr viele Elemente kommen, kannst du sie von Anfang an mit einer größeren Kapazität definieren und so ein paar "Vergrößerungsvorgänge" einsparen.
Ich hab allerdings keine Ahnung, was du hier eigentlich wissen möchtest:
Falls nicht -> gibt's eine einfachere Möglichkeit als eine Schleife zu nehmen und ständig al.add(new Typ()); ?
@zenpaticx
Nein, das geht nicht. Die ArrayList ist so definiert, dass sie eben eine dynamische Größe hat. Wenn du unbedingt eine feste Größe brauchst, wäre n Array besser.
@JStein52 mit der size-Methode, aber ich schätze mal, dass das nicht das gleiche ist, wenn du so fragst. @Saheeda besten Dank, dass heißt, dass ich wohl doch eine Schleife nehmen muss, um sie zu befüllen
Die capacity ist die größe des zugrundeliegenden Arrays. Diese kann man im Konstruktor mitgeben. Die arraylist muss dann weniger schnell vergrößert werden.
Auf die size hat das keinen Einfluss. Und für den Entwickler ändert sich auch nichts ob man es macht oder nicht. Das geht eher in den Bereich Performancetuning
Prinzipiell hast du mehrere Möglichkeiten.
Zum einen könntest du al.addAll(...) benutzen, falls du schon eine Liste hast.
Des Weiteren gibt es dir Möglichkeit, die Liste direkt zu befüllen:
Code:
List<T> list = new ArrayList<T>(){{
add(new Type());
add(new Type());
}};
Aber nur, wenn du die Objekte auch schon hast.
Auch geht das hier:
Code:
List<T> supplierNames = Arrays.asList(new Type(1), new Type(2), new Type(3));
Hast du die Elemente im Voraus nicht, dann wird dir nichts anderes als eine Schleife übrig bleiben.
Bitte, bitte, bitte nicht solche Konstrukte. Nicht viele Anfänger wissen was hier passiert! Hier erstellst du eine anonyme Subklasse von ArrayList<T> und benutzt hier einen dynamischen Initialisierungsblock.
Wenn du eine Liste benötigst mit einer fixen Größe und du willst immer das gleiche Element darin haben gibt es:
Java:
List<T> list =Collections.nCopies(int n,T t);
Sonst ist wie @Kababär schon gesagt hat Arrays::asList the way-to-go.