J'ai besoin d'un moyen efficace de supprimer des éléments de la liste. Si une condition survient, je dois supprimer les premiers éléments 'n' d'une liste. Quelqu'un peut-il suggérer le meilleur moyen de le faire? N'oubliez pas que la performance est un facteur pour moi. J'ai donc besoin d'un moyen plus rapide que de le parcourir. Merci.
Je pense à un moyen de créer le nième élément comme point de départ de la liste pour que les éléments 0-n soient récupérés. C'est possible?
Si les performances sont essentielles pour vous, je ne suis pas sûr d'utiliser les fonctions intégrées de ArrayList. Je doute qu'ils fonctionnent plus vite que O(n) et malheureusement, la documentation Java ne dit rien à ce sujet. Peut-être devriez-vous vous pencher sur des structures personnalisées comme un Corde .
créer subList()
Renvoie une vue de la partie de cette liste entre fromIndex, inclus, et toIndex, exclusif. (Si fromIndex et toIndex sont égaux, la liste renvoyée est vide.) La liste renvoyée est sauvegardée par cette liste. Par conséquent, les modifications apportées à la liste renvoyée sont reflétées dans cette liste, et inversement. La liste renvoyée prend en charge toutes les opérations de liste facultatives prises en charge par cette liste.
Vérifier la mise en œuvre de cette méthode et faire des tests pour déterminer les performances
Vous pouvez utiliser ArrayList.removeRange(int fromIndex, int toIndex)
.
Citer la documentation :
Supprime de cette liste tous les éléments dont l'index est compris entre FromIndex, inclus, et toIndex, exclusive. Déplace les éléments Suivants vers la gauche (réduit leur index). Cet appel raccourcit la liste Par des éléments (toIndex - fromIndex). (Si toIndex == fromIndex, cette opération Est sans effet.)
La réponse de Jigar Joshi est déjà contient la solution dont vous avez besoin. Je voulais ajouter d'autres choses. L'appel de clear()
sur la sous-liste se chargera de votre travail, je suppose. Mais il se peut qu’il utilise l’itération En arrière-plan, je ne suis pas sûr. Exemple de script pour votre utilisation:
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> subList = (ArrayList<Integer>) list.subList(0, 9);
subList.clear();
Si vous modifiez fréquemment la liste, pourquoi ne pas utiliser la classe LinkedList?
Si vous utilisez la classe ArrayList, lors de la suppression d'un élément, le tableau doit toujours être déplacé.
pensez à utiliser Ignorer les listes , cela vous donnera de bonnes performances si vous voulez que le nombre d'éléments supprimés soit divisé en intervalles.
il n'est pas possible d'omettre des itérations, mais il est possible de réduire le nombre d'itérations ou même de le rendre "constant"
/**
* @param length remove index [0..length)
*/
fun <E> MutableList<E>.removeFirst(length: Int): MutableList<E> {
if (length in 1..size) {
subList(0, length).clear()
}
return this
}
/**
* @param length remove index [(size - length)..size)
*/
fun <E> MutableList<E>.removeLast(length: Int): MutableList<E> {
if (length in 1..size) {
subList(size - length, size).clear()
}
return this
}
package hello // 可选的包头
/**
* @param length remove index [0..length)
*/
fun <E> MutableList<E>.removeFirst(length: Int): MutableList<E> {
if (length in 1..size) {
subList(0, length).clear()
}
return this
}
/**
* @param length remove index [(size - length)..size)
*/
fun <E> MutableList<E>.removeLast(length: Int): MutableList<E> {
if (length in 1..size) {
subList(size - length, size).clear()
}
return this
}
fun main(args: Array<String>) { // 包级可见的函数,接受一个字符串数组作为参数
println("Hello World!") // 分号可以省略
val list = mutableListOf<String>("0","1","2","3","4","5","6","7")
println(list)
list.removeFirst(2)
println(list)
list.removeLast(2)
println(list)
}
Hello World!
[0, 1, 2, 3, 4, 5, 6, 7]
[2, 3, 4, 5, 6, 7]
[2, 3, 4, 5]
https://www.cnblogs.com/gaojing/archive/2012/06/17/Java-list-sublist-caution.html