Bug in java.util.ArrayList?

Huhu Leute,

irgendwie kann ich es mir nicht ganz vorstellen, weil ArrayList ja doch eine recht häufig gebrauchte Klasse ist, aber bei mir funkts nicht und mir schaut es so aus als obs ein Fehler in der Implementierung wäre.

Bis jetzt habe ich immer ArrayList.add verwendet. Jetzt wollte ich ArrayList.set verwenden, und selbiges funktioniert nicht. Grund dafür ist, dass set einen Check gegen die Größe macht, gespeichert im Member size.

Dieses size wird aber nur vergrößert, wenn ich ein Element mit add hinzufüge. Ein erzeugen der ArrayList mit einer vorgegebenen Größe lässt size auf 0. Und ein ensureCapacity vergrößert zwar das interne Array, lässt size aber auch unverändert.

Da aber set gegen die size prüft, kann ich set erst verwenden, nachdem ich so oft add aufgerufen habe bis ich bei der Position angelangt bin auf die ich set aufrufen will.

Übersehe ich da was, oder ist das wirklich ein Fehler in ArrayList? Meine Version von ArrayList ist „1.25, 02/02/00“.

Grüße, Robert

Hmm ich find das Verhalten korrekt.

size bezieht sich auf die Anzahl Elemente in ArrayList.

Der Wert im Konstruktor bedeutet aber nicht dies, sondern wieviele Speicherplätze ArrayList schonmal vorhalten soll für kommende Elemente… die size (Anzahl Elemente) ist aber dennoch 0.

set kannst du nur auf Indizes aufrufen an denen schon ein Element steht und das tut es in deinem Fall nicht.

Grüße
Bruno

set kannst du nur auf Indizes aufrufen an denen schon ein
Element steht und das tut es in deinem Fall nicht.

Job, hast wohl recht, ist aber trotzdem ein IMHO eher seltsames Verhalten, zumindest nicht das was ich intuitiv erwartet hätte, und dokumentiert ist es auch nicht. Naja. :smile:

Grüße, Robert

Meiner Meinung nach ist es genauso dokumentiert :wink:

„Each ArrayList instance has a capacity. The capacity is the size of the array used to store the elements in the list. It is always at least as large as the list size.“

Du hast nur den Fehler gemacht und capacity mit size gleichgesetzt :wink:

Ja, du hast Recht, wenn man nicht zu faul wäre sich das genau durchzulesen, dann hätte man das wissen können. :smile:

Grüße, Robert