Menu

Tableaux en Java : déclarer, initialiser, accéder et parcourir

Comment fonctionnent les tableaux en Java - longueur fixe, déclaration et initialisation, indexation, length, parcours, tableaux multidimensionnels et la classe utilitaire Arrays.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Un tableau est une liste de taille fixe

Un tableau en Java contient un nombre fixe de valeurs du même type, disposées dans l'ordre et accessibles par leur position. « Fixe » est le mot clé : une fois que vous créez un tableau, sa longueur ne change jamais. Et « même type » : un int[] ne contient que des valeurs int, un String[] ne contient que des chaînes. Cette rigidité est le prix à payer pour que les tableaux soient rapides et compacts en mémoire.

Vous déclarez un type de tableau en plaçant [] après le type de l'élément, puis vous affectez un littéral ou en allouez un avec new :

Les crochets peuvent se placer après le type (int[] scores) ou après le nom (int scores[]). Les deux compilent, mais int[] scores est le style idiomatique en Java - mettez les [] avec le type, là où ils doivent être.

Créer un tableau avec new

Quand vous ne connaissez pas encore les valeurs mais que vous connaissez la taille, utilisez new. Cela alloue les cases et les remplit avec la valeur par défaut du type :

Les valeurs par défaut ne sont pas du contenu aléatoire - Java initialise chaque élément à zéro. Les types numériques commencent à 0 (ou 0.0), boolean commence à false, et les types référence comme String commencent à null. Ce null mérite qu'on s'en souvienne : un String[] fraîchement alloué est rempli de null, et appeler une méthode sur l'un d'eux lève une NullPointerException.

L'indexation commence à zéro

Vous lisez et écrivez les éléments par indice, en comptant à partir de 0. Le dernier indice valide est toujours length - 1 :

Contrairement aux tableaux de certains langages de script, sortir des limites ne vous renvoie pas discrètement null ou undefined - cela lève une exception. Essayez de lire un indice qui n'existe pas :

Ce programme plante avec :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 3

C'est l'une des erreurs les plus courantes chez les débutants. La correction est presque toujours une erreur d'un cran (off-by-one) dans la condition d'une boucle - utiliser <= là où vous vouliez <.

length est un champ, pas une méthode

Chaque tableau porte sa taille dans un champ length. Attention : pas de parenthèses.

Voici un piège qui attrape tout le monde au moins une fois : les tableaux utilisent .length (un champ), mais String utilise .length() (une méthode). Écrire nums.length() sur un tableau est une erreur de compilation, et écrire text.length sur une chaîne l'est aussi. Le même mot, des règles différentes - celui du tableau n'a pas de parenthèses.

Parcourir un tableau

Vous avez appris la boucle for-each à la page précédente, et c'est la façon la plus propre de lire chaque élément quand vous n'avez pas besoin de l'indice :

Quand vous avez besoin de l'indice - pour afficher des numéros de position, modifier des éléments sur place ou itérer à l'envers - tournez-vous vers la classique boucle for indexée, avec length comme borne :

La condition est i < names.length, pas <=. Utiliser <= va un cran trop loin et lève l'exception de dépassement de limites vue dans la section précédente. Une règle rapide : for-each quand vous ne faites que lire des valeurs, for indexée quand vous avez besoin de la position ou que vous voulez réécrire dans le tableau.

Tableaux multidimensionnels

Un tableau 2D est en réalité un tableau de tableaux - voyez-le comme une grille de lignes et de colonnes. Vous ajoutez une deuxième paire de crochets :

grid[ligne][colonne] sélectionne une seule cellule. Comme chaque ligne est son propre tableau, grid.length est le nombre de lignes et grid[0].length est le nombre de colonnes de la première ligne. Les lignes n'ont même pas à être de la même longueur (c'est ce qu'on appelle un tableau irrégulier, ou jagged), bien que la plupart des grilles soient rectangulaires.

La classe utilitaire Arrays

Les tableaux en eux-mêmes n'ont presque aucune méthode - vous ne pouvez ni en trier ni en afficher un directement de manière utile. Java fournit une classe utilitaire java.util.Arrays remplie d'aides statiques précisément pour cela :

Quelques points sur lesquels s'appuyer ici. Arrays.toString(arr) est la bonne façon d'afficher un tableau - en afficher un directement vous donne une chaîne inutile comme [I@1b6d3586. Arrays.sort trie sur place. Arrays.copyOf est la manière de « redimensionner » : il renvoie un nouveau tableau de la longueur demandée, en complétant avec les valeurs par défaut (les deux cases supplémentaires ci-dessus valent 0). Et Arrays.binarySearch ne fonctionne correctement que sur un tableau déjà trié.

Tableaux et ArrayList

Utilisez un simple tableau quand la taille est connue d'avance et ne changera pas - un ensemble fixe de jours de la semaine, un plateau de jeu, des données de pixels. Les tableaux sont rapides et légers, mais leur longueur fixe est une vraie limite : vous ne pouvez pas ajouter un septième élément à un tableau de longueur 6 sans en construire un tout nouveau.

Dès que vous avez besoin d'ajouter et de retirer des éléments librement, un tableau devient peu pratique. C'est à cela que sert ArrayList - une liste redimensionnable et extensible qui gère la recopie à votre place.

Suite : ArrayList

Quand vous ne savez pas combien d'éléments vous aurez, ou que ce nombre change à mesure que votre programme s'exécute, un tableau de longueur fixe vous gêne. ArrayList est la réponse de Java : une liste qui s'agrandit et se réduit à la demande, avec des méthodes add et remove au lieu de jongler avec les indices. C'est la suite.

Questions fréquentes

Comment déclarer et initialiser un tableau en Java ?

Déclarez le type avec des crochets et affectez un littéral : int[] nums = {1, 2, 3};. Pour créer un tableau vide de taille fixe, utilisez new : int[] nums = new int[5]; - cela vous donne 5 cases, chacune remplie avec la valeur par défaut (0 pour int, null pour les objets).

Comment obtenir la longueur d'un tableau en Java ?

Utilisez le champ length (sans parenthèses) : nums.length. C'est un champ, pas une méthode, donc nums.length() provoque une erreur de compilation. Notez que String utilise .length() avec des parenthèses, alors que les tableaux utilisent .length sans - une confusion classique.

Un tableau Java peut-il changer de taille après sa création ?

Non. Un tableau Java a une longueur fixe définie à sa création et vous ne pouvez ni l'agrandir ni le réduire. Si vous avez besoin d'une liste redimensionnable, utilisez plutôt une ArrayList. Pour "redimensionner" un tableau, il faudrait en créer un nouveau, plus grand, et y recopier les éléments.

Qu'est-ce que ArrayIndexOutOfBoundsException en Java ?

C'est l'erreur d'exécution que vous obtenez en accédant à un indice qui n'existe pas - inférieur à 0 ou >= array.length. Contrairement à certains langages, Java ne renvoie ni valeur par défaut ni null pour un accès hors limites ; il lève une exception. Les indices valides vont toujours de 0 à length - 1.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER