Si vous debe utiliser des tableaux, System.arraycopy
est la solution la plus efficace et la plus évolutive. Cependant, si vous devez retirer un élément d'un tableau plusieurs fois, vous devez utiliser une implémentation de List plutôt qu'un tableau.
Ce qui suit utilise System.arraycopy
afin d'obtenir l'effet désiré.
public static Object[] remove(Object[] array, Object element) {
if (array.length > 0) {
int index = -1;
for (int i = 0; i < array.length; i++) {
if (array[i].equals(element)) {
index = i;
break;
}
}
if (index >= 0) {
Object[] copy = (Object[]) Array.newInstance(array.getClass()
.getComponentType(), array.length - 1);
if (copy.length > 0) {
System.arraycopy(array, 0, copy, 0, index);
System.arraycopy(array, index + 1, copy, index, copy.length - index);
}
return copy;
}
}
return array;
}
De plus, vous pouvez augmenter l'efficacité de la méthode si vous savez que votre tableau est composé uniquement de Comparable
objets. Vous pouvez utiliser Arrays.sort
pour les trier avant de les faire passer dans le remove
modifiée pour utiliser la méthode Arrays.binarySearch
pour trouver l'indice plutôt qu'une boucle for, ce qui fait passer l'efficacité de cette partie de la méthode de O(n) à O(nlogn).