ArrayList remove method -
i have @ arraylist source code,found remove method follows:
/** * removes element @ specified position in list. * shifts subsequent elements left (subtracts 1 * indices). * * @param index index of element removed * @return element removed list * @throws indexoutofboundsexception {@inheritdoc} */ public e remove(int index) { if (index >= size) throw new indexoutofboundsexception(outofboundsmsg(index)); modcount++; e oldvalue = (e) elementdata[index]; int nummoved = size - index - 1; if (nummoved > 0) system.arraycopy(elementdata, index+1, elementdata, index, nummoved); elementdata[--size] = null; // clear let gc work return oldvalue; }
why doesn't consider situation when index<0?
passing in negative index fail on following line:
e oldvalue = (e) elementdata[index];
specifically, access elementdata
underlying array happen negative index. cause arrayindexoutofboundsexception
thrown, documentation describes:
thrown indicate array has been accessed illegal index. index either negative or greater or equal size of array.
hence, arraylist#remove()
implementation not need language handle case of negative indices.
however, might wondering why code does make following check if index larger size:
if (index >= size) throw new indexoutofboundsexception(outofboundsmsg(index));
the reason check made because possible index passed in within bounds of elementdata
larger logical size of actual list/array. in other words, size of underlying array not (and not) need in lock step actual number of entries in list. rather, jvm grow or shrink elementdata
array needed depending size , usage of list.
Comments
Post a Comment