Ковыряю java src, в классе ArrayList наткнулся на код ниже (elementData - это transient Object[]). В нём перед перебором массив копируют в новую переменную. Зачем так сделали, если можно перебирать изначальный массив?
public int indexOf(Object o) {
return indexOfRange(o, 0, size);
}
int indexOfRange(Object o, int start, int end) {
Object[] es = elementData;
if (o == null) {
for (int i = start; i < end; i++) {
if (es[i] == null) {
return i;
}
}
} else {
for (int i = start; i < end; i++) {
if (o.equals(es[i])) {
return i;
}
}
}
return -1;
}