ArrayList doof oder ich verwirrt?



  • Ich aergere mich hier gerade ein wenig mit ArrayList herum und wollte mal checken, ob ich nur was falsch mache oder meine Kopie von ArrayList verbuggt ist.
    zB. Folgender Code

    ArrayList<SomeObject> a = new ArrayList(42);
    //a.ensureCapacity(42); // aendert nichts.
    a.set(0, someInstance);
    

    steigt bei mir zB. mit einer ArrayIndexOutOfBoundsException aus:

    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.set(ArrayList.java:337)
    ...

    Also habe ich mir die ArrayList.java (Sun, 1.56 06/04/21) mal angeschaut und der RangeCheck in set schmeisst eine Exception nach Abgleich des an set uebergebenen Index mit einer privaten int Variable "size", die jedoch weder im Konstruktor noch in ensureCapacity gesetzt wird... Sinnvoll? Was nun? 😕



  • Schau Dir mal den Unterschied zwischen Kapazität und Kardinalität an.



  • Guck halt in die Javadoc:

    IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size()).



  • Nobuo T schrieb:

    Ich aergere mich hier gerade ein wenig mit ArrayList herum und wollte mal checken, ob ich nur was falsch mache oder meine Kopie von ArrayList verbuggt ist.
    zB. Folgender Code

    ArrayList<SomeObject> a = new ArrayList(42);
    //a.ensureCapacity(42); // aendert nichts.
    a.set(0, someInstance);
    

    steigt bei mir zB. mit einer ArrayIndexOutOfBoundsException aus:

    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.set(ArrayList.java:337)
    ...

    es ist noch nichts drin, was du mit 'set' überschreiben könntest. die 42 reserviert nur speicher, setzt aber keine 'dummy-elemente' ein. eine arraylist ist kein array, bei dem die elemente immer vorhanden sind.
    🙂



  • Ah, ok. Ich sehe wie's gedacht ist. Danke. 🙂


Anmelden zum Antworten