# ArrayList mit Größe initialisieren



## blackrainboW (18. Sep 2006)

Hallo,

ich habe gerade ein Problem mit einer ArrayList:

Ich schreibe:

```
ArrayList filenames = new ArrayList( list.size() );
System.out.println(filenames.size());
```
list.size ist im aktuellen Kontext 15.
Nur die Ausgabe liefert immer den Wert 0!!!
Wieso bekommen ich die ArrayList nicht mit der entsprecheden Größe 15 initialisiert??
Weil alle Werte noch null sind? Wie bekomme ich es hin?

Gruß,
blackrainboW


----------



## micbur (18. Sep 2006)

Hallo, 

ArrayList.size() gibt dir die Zahlt der enthaltenen Objekte zurück. 
Mit dem Konstruktor ArrayList(int) sagst du Java nur, wie viel Speicher es initial vorhalten soll. Das ist für Programmierer gedacht, die in etwa wissen, wie viele Daten kommen werden, damit gleich die richtige Menge Speicher zur Verfügung steht und die JRE nicht nach-und-nach Speicherbrocken anfordern muss, was Zeit kostet. 

War das hilfreich? 

Ciao, micbur


----------



## thE_29 (18. Sep 2006)

Jojo, englisch sollte man können und die API lesen...


Wir hatten nen Dipl-Ing FH der genau das gleiche dachte wie der Threadersteller..

Naja, nach 1 Monat wurde er gegangen..


----------



## byte (18. Sep 2006)

Jaja, typisch Dipl... alles Pfeifen. :bae:


----------



## blackrainboW (18. Sep 2006)

bei c# ist das anders. 
Ich finde diese Implementation nicht besonders sinnvoll, da ich gern mit der set-Methode auf die ArrayList zugreifen
würde wie mit einem ganz normalen Array, welches ich indexieren kann. Nun muss ich aber erst in einer Schleife mit 
der add-Mehode die ArrayList initialisieren, um keine IndexOutofRange-Exception zu bekommen.
Naja ,muss ich mich wohl dran gewöhnen.
@thE_29: die Frage hat wie ich finde seine Berechtigung und hat nichts mit programmiertechnischer Unterqualifikation 
zu tun. Ich bin übrigens auch Diplom-FH'ler.


----------



## thE_29 (18. Sep 2006)

Ähm, wennst du ne fixe Größe hast und via set drauf zugreifen willst, dann nimm doch ein Object Array?!


----------



## byte (18. Sep 2006)

Wo genau liegt Dein Problem? Du kannst bei Listen generell genauso wie bei Arrays indexieren mit get(i) bzw. add(i, object). Die Längenangabe bei ArrayList ist nur dafür da, dass man Einfluß auf die Länge des (intern verwendeten) Arrays nehmen kann, um somit bei Bedarf ein bißchen Performance rauszuholen.

Edit: Ansonsten s.o.


----------



## blackrainboW (18. Sep 2006)

Nein das geht leider nicht, ich muss Strings rausnehmen können und die Liste muss sich dann automatisch verkleinern.

Gruß


----------



## AlArenal (18. Sep 2006)

Und wo ist nun das Problem? *kopfkratz*


----------



## blackrainboW (18. Sep 2006)

ich verstehe einfach nicht, warum filenames.size() nicht Wert 15 liefert wenn ich im Konstruktor die Größe 15 angebe.
Wenn ich gleich danach mit filenames.set( 0, "Wert"); darauf zugreife bekomme ich ne IndexOutOfBoundsException: Index: 0, Size: 0.
Das ist doch irgendwie....!!!


----------



## thE_29 (18. Sep 2006)

Weil es eben um den Speicherarray geht und nicht um die eigentliche Array größe!

Nur weil die 15 sagst, sind ja keine 15 Elemente darin enthalten, sondern eben GAR NIX!


Addes mit add und alles ist okay!


----------



## micbur (18. Sep 2006)

Du hast ja auch noch nix drin in deiner ArrayList. Wenn du ein add() oder addAll(9 machst, dann ist was drin und du kannst drauf zugreifen. 

Im Prinzip hast du eine komfortable Liste mit Indexverwaltung.


----------



## Bert Brenner (18. Sep 2006)

Du brauchst du noch 15 mal die Methode add aufrufen wenn du das unbedingt so haben willst das am Anfang die Methode size 15 zurückgibt.


----------



## AlArenal (18. Sep 2006)

Bei solch stylischen Vorgehensweisen rollen sich mir die Fu0nägel hoch


----------



## micbur (18. Sep 2006)

Hey, zumindest hat er jetzt seine 15 bei ArrayList.size() zu stehen. Ganz nach C# ... so wie er's wollte.


----------



## blackrainboW (18. Sep 2006)

Danke für die Antworten. :applaus:   Läuft alles wie geschmiert!


----------



## Murray (18. Sep 2006)

Wenn Du eine mit einem bestimmten Wert initialisierte Liste einer bestimmten Größe brauchst, dann kannst Du anstelle einer Schleife mit add()-Anweisungen etwas eleganter  java.util.Arrays verwenden:

```
String[] strs = new String[15];
Arrays.fill( strs, "");
List<String> lst = Arrays.asList( strs);
```


----------

