Début de la boite de navigation du chapitre
Tableaux
Icône de la faculté
Chapitre no 6
Leçon : Java
Chap. préc. :Boucles et structures conditionnelles
Chap. suiv. :Classes et objets
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Java : Tableaux
Java/Tableaux
 », n'a pu être restituée correctement ci-dessus.
descriptif indisponible
Wikibooks-logo.svg
Wikilivres possède un manuel à propos de « Programmation Java/Tableaux ».

Tableaux

modifier

Pratiquement tous les langages gèrent les tableaux. Utiliser des tableaux en C ou C++ est dangereux car ces tableaux ne sont que des blocs de mémoire. Si un programme accède à un tableau en dehors de son bloc mémoire, ou s'il utilise la mémoire avant initialisation (erreurs de programmation fréquentes) les résultats seront imprévisibles.

Un des principaux objectifs de Java est la sécurité, aussi, un grand nombre des problèmes dont souffrent C et C++ ne sont pas rejetées sous Java. On est assuré qu'un tableau Java est initialisé et qu’il ne peut être accessible au delà de ses bornes. La vérification des bornes se fait au prix d’un petit excédent de mémoire pour chaque tableau ainsi que la vérification de l'index lors de l'exécution, mais on suppose que le gain de sécurité et en productivité vaut la dépense.

Quand on crée un tableau d'objet, on crée en réalité un tableau de références, et chacune de ces références est automatiquement initialisée à une valeur particulière avec son propre mot clé : null. Quand Java voit null, il reconnaît que la référence en question ne pointe pas vers un objet. Il faut affecter un objet à chaque référence avant de l’utiliser et si on essaye d’utiliser une référence encore null, le problème sera signalé lors de l'exécution. Ainsi, les erreurs typiques sur les tableaux sont évitées en Java.

On peut aussi créer des tableaux de variables de types primitif. À nouveau, le compilateur garantit l'initialisation car il met à zéro la mémoire utilisée par ces tableaux.

Les tableaux se distinguent des autres conteneurs sur deux points : l'efficacité et le type. Un tableau constitue la manière la plus efficace que propose Java pour stocker et accéder aléatoirement à une séquence d'objets (en fait de référence sur ces objets). Un tableau est une simple séquence linéaire, ce qui rend l'accès aux éléments extrêmement rapide; mais cette rapidité se paye : la taille d’un tableau est fixée lors de la création et ne peut plus être changé pendant toute la durée de sa vie. Une solution est de créer un nouveau tableau et de déplacer toutes les références de l'ancien tableau vers le nouveau.

Déclaration de tableaux

modifier

La création de tableaux en Java se fait à peu près de la même manière que la création de variables. Prenons l'exemple suivant :

String[] monTableau ;
//On a créé un tableau de chaînes de caractères mais ce tableau n’est pas encore utilisable car il n'a pas de taille !
 monTableau = new String[nombreDObjets] ;
//Il est maintenant utilisable et indexé de 0 à nombreDObjets-1.

//On peut toutefois compresser l'écriture en mettant directement :
 String[] monTableau2 = new String[nombreDObjets] ;

//On peut aussi le remplir directement :
 String[] monTableau3 = {"chaine 1", "chaine 2", "chaine 3"};

Il est possible de faire des tableaux de tout type de données, y compris les types que l’on crée soit même (mais nous verrons ça dans le chapitre sur les objets). Il est aussi possible de créer des tableaux de tableaux et plus encore. Par exemple :

int[][] tableauDeTableau = new int[5][4] ;
//Ainsi tableauDeTableau est en réalité une matrice de taille 5x4.
//Ceci peut être très utile pour la manipulation de grille par exemple.
boolean[][][] pave = new boolean[3][4][5] ;
//On peut aussi créer des tableaux à plus de deux dimensions, 
//on n'est en fait pas limité dans la dimension de notre tableau

Remarque : un tableau ne peut contenir qu'un seul type de donnée. Ainsi, il est impossible de stocker des entiers dans un tableau qui a été déclaré comme contenant des chaînes de caractères.

Utilisation de tableaux

modifier

Maintenant que l’on sait déclarer un tableau, il peut être intéressant de savoir comment s'en servir. Plusieurs choses sont à savoir :

  • la première est comment utiliser les objets présents dans le tableau
  • la deuxième est comment utiliser de manière pratique les tableaux
int[] monTableau = new int[5] ;
//Ici on crée un tableau de 5 entier, les indices du tableau
//vont donc de 0 à 4.

for(int i=0 ; i<monTableau.length ; ++i){
   monTableau[i] = i + 1 ;
}

Ici, on utilise une boucle for pour parcourir l’ensemble du tableau. On utilisera le plus souvent ce genre de boucle sur les tableaux car leur taille est définie lors de la déclaration et donc on connait leur taille. Pour être sûr de ne pas se tromper sur la taille du tableau, ce qui nous ferait sortir du tableau lors de l'exécution de la boucle, on utilise ici la méthode length qui est valable sur tous les tableaux de données de type de base.

Si l’on crée un tableau d'objets qui ne sont pas d’un type de base, il faudrait alors utiliser la méthode length() héritée de Object mais on reverra ceci plus en détail dans la partie destinée aux objets.

monTableau[i] désigne le i+1 ième entier de monTableau