Arrays.asList () renvoie une liste qui ne permet pas les opérations affectant sa taille (notez que ce n'est pas la même chose que "non modifiable").
Vous pouvez faire new ArrayList<String>(Arrays.asList(split));pour créer une copie réelle, mais en voyant ce que vous essayez de faire, voici une suggestion supplémentaire (vous avez un O(n^2)algorithme juste en dessous).
Vous souhaitez supprimer list.size() - count(appelons cela k) des éléments aléatoires de la liste. Il suffit de sélectionner autant d'éléments aléatoires et de les échanger aux kpositions finales de la liste, puis de supprimer toute la plage (par exemple, en utilisant subList () et clear () à ce sujet). Cela le transformerait en un O(n)algorithme maigre et moyen ( O(k)est plus précis).
Mise à jour : Comme indiqué ci-dessous, cet algorithme n'a de sens que si les éléments ne sont pas ordonnés, par exemple si la liste représente un sac. Si, en revanche, la Liste a un ordre significatif, cet algorithme ne le conserverait pas (l'algorithme des polygénubrifiants le ferait à la place).
Mise à jour 2 : Donc, rétrospectivement, un meilleur algorithme (linéaire, maintenant l'ordre, mais avec des nombres aléatoires O (n)) ressemblerait à ceci:
LinkedList<String> elements = ...; //to avoid the slow ArrayList.remove()
int k = elements.size() - count; //elements to select/delete
int remaining = elements.size(); //elements remaining to be iterated
for (Iterator i = elements.iterator(); k > 0 && i.hasNext(); remaining--) {
i.next();
if (random.nextInt(remaining) < k) {
//or (random.nextDouble() < (double)k/remaining)
i.remove();
k--;
}
}