Kotlin : List vs Array — la bataille des types de données à connaître

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Kotlin : List vs Array — quel est le piège ?

\n\n

Si vous écrivez en Kotlin depuis au moins une semaine, vous vous êtes sûrement posé la question : « Mais pourquoi ne puis-je pas simplement utiliser Array partout ? Pourquoi ai-je besoin de ces List et MutableList ? »

\n\n

Cette question est l'une des plus populaires sur Stack Overflow. Et ce n'est pas sans raison. À première vue, la liste et le tableau stockent tous deux des éléments, on peut y accéder par index, on peut les parcourir. Mais creusez un peu plus — et vous découvrirez des différences fondamentales qui affectent les performances, la sécurité du code et même votre façon de penser lors de la conception de l'architecture.

\n\n

Dans ce tutoriel, nous allons détailler point par point la différence entre List et Array en Kotlin. Vous apprendrez quand utiliser un tableau et quand utiliser une liste, et pourquoi les développeurs expérimentés choisissent presque toujours List.

\n\n

1. Les bases : qu'est-ce que Array en Kotlin ?

\n\n

Array en Kotlin est une projection directe du tableau Java. C'est une séquence fixe d'éléments du même type. Lorsque vous créez un tableau, vous allouez immédiatement la mémoire correspondante. Vous ne pouvez pas modifier la taille du tableau après sa création.

\n\n
// Création d'un tableau\nval numbers: Array<Int> = arrayOf(1, 2, 3, 4, 5)\nprintln(numbers[0]) // 1\nnumbers[2] = 10     // on peut modifier la valeur\nprintln(numbers[2]) // 10
\n\n

Les tableaux en Kotlin sont mutable (modifiables) par nature : vous pouvez toujours remplacer un élément par son index. Mais vous ne pouvez pas ajouter un nouvel élément ni en supprimer un existant. La taille est fixée pour toujours.

\n\n

Caractéristiques de Array :

\n
    \n
  • Taille fixe — impossible d'ajouter ou de supprimer un élément.
  • \n
  • Contenu modifiable — on peut réécrire les éléments.
  • \n
  • Performances — maximales, car il s'agit d'un accès direct à la mémoire.
  • Tableaux primitifs — il existe des types spéciaux : IntArray, ByteArray, FloatArray, etc. Ils fonctionnent sans boxing, ce qui offre un gain de vitesse.
\n\n
// Tableau primitif — sans boxing\nval intArray: IntArray = intArrayOf(1, 2, 3, 4, 5)
\n\n

2. Les bases : qu'est-ce que List en Kotlin ?

\n\n

List est une interface de la bibliothèque standard de Kotlin. Contrairement au tableau, la liste est une abstraction. Vous ne savez pas exactement comment elle stocke les données en interne (cela peut être ArrayList, LinkedList ou autre chose).

\n\n
// Création d'une liste immuable\nval fruits: List<String> = listOf("pomme", "banane", "cerise")\nprintln(fruits[0]) // pomme\n// fruits[0] = "orange" // Erreur de compilation !
\n\n

La principale « particularité » de Kotlin est la séparation entre read-only (lecture seule) (List) et mutable (MutableList).

\n\n

List (read-only) :

\n
    \n
  • Impossible de modifier le contenu (ni ajouter, ni supprimer, ni remplacer).
  • Lecture seule.
  • Plus sûr pour le transfert de données entre composants.
\n\n

MutableList :

\n
    \n
  • Possibilité d'ajouter, supprimer, remplacer des éléments.
  • Taille dynamique.
  • En pratique, ArrayList est le plus souvent utilisé en interne.
\n\n
val mutableFruits: MutableList<String> = mutableListOf("pomme", "banane")\nmutableFruits.add("orange")     // OK\nmutableFruits.remove("banane")  // OK\nmutableFruits[0] = "poire"      // OK
\n\n

3. Différences clés entre List et Array

\n\n

Résumons tout cela dans un tableau visuel (dans le code — sous forme de commentaires).

\n\n
// 1. Mutabilité\nval array = arrayOf(1, 2, 3)\narray[0] = 99 // ✅ Fonctionne\n\nval list = listOf(1, 2, 3)\n// list[0] = 99 // ❌ Erreur de compilation\n\nval mutableList = mutableListOf(1, 2, 3)\nmutableList[0] = 99 // ✅ Fonctionne\n\n// 2. Taille\nval fixedArray = arrayOf(1, 2, 3)\n// fixedArray.add(4) // ❌ Cette méthode n'existe pas\n\nva                

Blogs

Book Recommendations