in src/main/java/org/apache/commons/lang3/ArrayUtils.java [5303:5345]
static Object removeAll(final Object array, final int... indices) {
final int length = getLength(array);
int diff = 0; // number of distinct indexes, i.e. number of entries that will be removed
final int[] clonedIndices = ArraySorter.sort(clone(indices));
// identify length of result array
if (isNotEmpty(clonedIndices)) {
int i = clonedIndices.length;
int prevIndex = length;
while (--i >= 0) {
final int index = clonedIndices[i];
if (index < 0 || index >= length) {
throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
}
if (index >= prevIndex) {
continue;
}
diff++;
prevIndex = index;
}
}
// create result array
final Object result = Array.newInstance(array.getClass().getComponentType(), length - diff);
if (diff < length) {
int end = length; // index just after last copy
int dest = length - diff; // number of entries so far not copied
for (int i = clonedIndices.length - 1; i >= 0; i--) {
final int index = clonedIndices[i];
if (end - index > 1) { // same as (cp > 0)
final int cp = end - index - 1;
dest -= cp;
System.arraycopy(array, index + 1, result, dest, cp);
// After this copy, we still have room for dest items.
}
end = index;
}
if (end > 0) {
System.arraycopy(array, 0, result, 0, end);
}
}
return result;
}