Introduction : Le paradoxe de la liste vide en Kotlin
\n\nImaginez : vous écrivez en Kotlin et vous devez créer une liste qui sera dynamiquement alimentée. Vous savez que List est une collection immuable et que MutableList est ce qu'il vous faut. Mais dès que vous écrivez val list = MutableList(), le compilateur affiche une erreur. Cela vous dit quelque chose ?
Cette question est l'une des plus populaires sur Stack Overflow parmi les débutants en Kotlin (et pas seulement). Des milliers de développeurs trébuchent sur le même râteau : comment initialiser correctement un MutableList vide ? Cela semble un détail, mais sans cela, aucun algorithme dynamique ne fonctionne.
Dans cet article, nous allons passer en revue toutes les méthodes légales pour créer une liste mutable vide en Kotlin. Des astuces simples aux techniques avancées. Vous découvrirez pourquoi mutableListOf() est votre meilleur ami, et ArrayList() un compagnon ancien mais fiable. C'est parti !
1. Pourquoi MutableList() ne fonctionne-t-il pas simplement ?
\n\nDissipons tout de suite le mythe. Si vous essayez d'écrire :
\n\n// Erreur de compilation !\nval list = MutableList()\n\nLe compilateur s'indignera à juste titre. Pourquoi ? Parce que MutableList est une interface, pas une classe concrète. Une interface ne peut pas être instanciée. C'est comme essayer de créer "une simple voiture" sans préciser la marque et le modèle. Kotlin exige une implémentation concrète.
Heureusement, nous avons plusieurs façons élégantes de contourner cette limitation.
\n\n2. La méthode la plus simple : mutableListOf()
\n\nC'est le roi des listes vides. Une fonction-fabrique standard de la bibliothèque standard de Kotlin :
\n\nval emptyList = mutableListOf<String>()\nprintln(emptyList) // Affichage : []\nprintln(emptyList.size) // Affichage : 0\n\nPourquoi c'est génial :
\n- \n
- Pas besoin de spécifier le type s'il peut être déduit du contexte \n
- Crée un
MutableListavec le typeArrayListen interne \n - Se lit comme "crée-moi une liste mutable à partir de rien" \n
Ajouter des éléments est un jeu d'enfant :
\n\nval numbers = mutableListOf<Int>()\nnumbers.add(1)\nnumbers.add(2)\nnumbers.add(3)\nprintln(numbers) // [1, 2, 3]\n\nCette méthode convient dans 90% des cas. Retenez-la comme méthode principale.
\n\n3. Le classique ArrayList() — le retour du roi
\n\nSi vous venez de Java, cette méthode vous semblera familière. Kotlin est entièrement compatible avec le Java Collections Framework, vous pouvez donc utiliser ArrayList directement :
val list = ArrayList<String>()\nprintln(list) // []\n\nMais il y a un détail : ArrayList est une implémentation concrète de l'interface MutableList. Si plus tard vous souhaitez changer l'implémentation (par exemple, pour LinkedList), vous devrez modifier le type de la variable. En ce sens, mutableListOf() est plus flexible car il retourne un MutableList.
Quand utiliser ArrayList() :
\n- \n
- Quand vous avez besoin de performances maximales (ArrayList est plus rapide que LinkedList pour l'accès par index) \n
- Quand vous travaillez avec des bibliothèques Java qui attendent spécifiquement un ArrayList \n
- Quand vous choisissez délibérément une implémentation concrète \n
4. La méthode astucieuse : MutableList(size) { defaultValue }
\n\nParfois, une liste vide n'est pas vraiment "vide". Il peut être nécessaire de créer une liste avec une taille prédéfinie, mais avec des valeurs vides. Pour cela, il existe une surcharge du constructeur :
\n\n// Créer une liste de 5 éléments, chacun étant une chaîne vide\nval list = MutableList(5) { "" }\nprintln(list) // [, , , , ]\nprintln(list.size) // 5\n\nCe n'est pas tout à fait une liste vide, mais une liste initialisée avec des "valeurs vides". Utile lorsque vous connaissez exactement le nombre d'éléments, mais que vous allez les réécrire.
\n\nPour un zéro absolu, utilisez
Blogs
Book Recommendations
Lire aussi
Modèles de conception en TypeScript : niveau avancé avec exemples
Optimisation des performances des applications Swift : méthodes pratiques
Réusinage de code legacy en Go : techniques et stratégies avancées
Optimisation des performances des applications JavaScript sur Node.js
Programmation fonctionnelle en PHP : niveau avancé