Les tableaux en Java

11 Sep 2019 11 Sep 2019 20556 vues ESSADDOUKI Mostafa 14 min de lecture
Introduction
1 Nouveautés de Java 11 2 Différences entre JDK, JRE et JVM 3 Structure d'un programme Java - Hello World 4 Mots clés et conventions de dénomination en Java 5 Types de données intégrés en Java 6 Les variables en Java 7 Classes enveloppe - Number, Integer, Double ... 8 Lire les entrées clavier en Java
Structures de contrôle
9 Les opérateurs en Java 10 Les structures conditionnelles en Java 11 Les boucles en Java 12 Instructions de contrôle de boucle - break, continue
Chaines de caractères
13 Les chaines en Java - API String 14 Les chaines en Java - StringBuffer et StringBuilder 15 Les expressions régulières en Java
Programmation OO
16 Objets et classes en Java 17 Modificateurs d'accès Java - public, private, protected et package 18 Méthodes et surcharge des méthodes en Java 19 les constructeurs en Java 20 L'héritage en Java 21 Classes abstraites en Java 22 Interfaces et héritage multiple en Java 23 Les classes imbriquées en Java 24 Les singletons en Java 25 Classes et méthodes génériques 26 Interface fonctionnelle et expressions Lambda en Java
Tableaux et collections
27 Les tableaux en Java 28 Classe Arrays - java.util.Arrays 29 Les listes dynamiques - java.util.ArrayList 30 Les listes chaînées en Java - java.util.LinkedList 31 HashSet en Java - java.util.HashSet 32 HashMap en Java - java.util.HashMap
Gestion des fichiers
33 Comprendre les fichiers informatiques 34 Utilisation des classes Path et Files en Java 35 Lecture et écriture dans un fichier en Java 36 Fichiers à accès aléatoire en Java
Gestion d'exceptions
37 Gestion d'exceptions en Java 38 Créez vos propres classes d'exception en Java
Programmation concurrente
39 Introduction à la programmation concurrente en Java - Multi-threads 40 classe java.lang.Thread 41 Synchronisation des threads en Java
Cours Java pour les débutants — Étape 27 sur 41

Tableaux en Java

  Prérequis

Maîtriser les variables, les types de données primitifs et les références. Comprendre les boucles for et for-each. Connaître les bases de la déclaration de méthodes.

  Objectifs

Comprendre la notion de tableau comme structure de données homogène. Maîtriser la déclaration, la création, l'initialisation et l'accès aux tableaux à une et deux dimensions. Savoir parcourir, passer et retourner des tableaux dans des méthodes. Connaître les particularités des tableaux irréguliers (ragged arrays).

1. Qu'est-ce qu'un tableau ?

Tableau

Un tableau est une liste nommée d'éléments de données qui ont tous le même type. Chaque donnée est un élément du tableau. En Java, un tableau est un objet (de type référence).

Caractéristiques fondamentales
  • Homogénéité — tous les éléments sont du même type
  • Taille fixe — la longueur est déterminée à la création et ne peut pas changer
  • Indexation à partir de 0 — le premier élément est à l'indice 0
  • Accès direct — accès en temps constant O(1) par indice
  • Objet en Java — possède un attribut length

2. Tableaux à une dimension (1D)

2.1 Déclaration d'un tableau

Vous déclarez un tableau de la même manière qu'une variable simple, mais vous insérez une paire de crochets après le type de données (style recommandé).

   
Syntaxe — Déclaration Java
typeDonnee[] nomTableau;   // style recommandé
// ou
typeDonnee nomTableau[];   // style C (déconseillé)

  Exemple 1 — Déclaration

double[] tarifs;
String[] noms;
Etudiant[] listeEtudiants;   // tableau d'objets
Conventions de nommage

Les noms de tableau commencent par une lettre minuscule et utilisent des lettres majuscules pour les mots suivants. Exemple : listeEtudiants, nomsProduits.

2.2 Création d'un tableau (réservation mémoire)

Déclarer un tableau et lui réserver de la mémoire sont deux processus distincts. La déclaration crée une référence null ; la création avec new alloue la mémoire.

   
Syntaxe — Création Java
nomTableau = new typeDonnee[taille];
// ou en une seule instruction
typeDonnee[] nomTableau = new typeDonnee[taille];

  Exemple 2 — Création en deux étapes

Etudiant[] listeEtudiants;           // déclaration (null)
listeEtudiants = new Etudiant[20];   // création (20 références null)

  Exemple 3 — Déclaration et création en une instruction

int[] notes = new int[30];
String[] villes = new String[10];
double[] coefficients = new double[5];
Différence avec C++

En Java, la taille du tableau suit le type de données et n'est jamais déclarée immédiatement après le nom (comme en C++). Cette syntaxe facilite la distinction entre les noms de tableaux et les méthodes.

2.3 Indices (index)

Indice (index)

Un indice est un entier contenu entre crochets qui spécifie un élément particulier du tableau. En Java, tous les éléments sont numérotés en commençant par 0.

Règles d'indexation
  • Le premier élément a l'indice 0
  • Le dernier élément a l'indice longueur - 1
  • L'expression tableau.length donne le nombre d'éléments
  • Un indice invalide (négatif ou ≥ longueur) lève une exception ArrayIndexOutOfBoundsException

  Exemple 4 — Accès aux éléments

int[] notes = new int[5];
notes[0] = 15;    // premier élément (indice 0)
notes[1] = 12;    // deuxième élément
notes[4] = 18;    // dernier élément (indice 4)

System.out.println("Longueur : " + notes.length);  // 5

2.4 Initialisation des tableaux

Lors de la création, les éléments reçoivent des valeurs par défaut :

Type Valeur par défaut
byte, short, int, long 0
float, double 0.0
char '\u0000' (null character)
boolean false
Objets (y compris String) null

L'initialisation explicite avec une liste de valeurs :

   
Syntaxe — Initialisation avec liste Java
typeDonnee[] nomTableau = {valeur1, valeur2, ..., valeurN};

  Exemple 5 — Initialisation à la déclaration

int[] nombres = {2, 5, 3, 7, 6, 8, 9, 10, 13};
String[] jours = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi"};
char[] voyelles = {'A', 'E', 'I', 'O', 'U', 'Y'};
⚠️ Initialisation partielle impossible

Vous ne pouvez pas créer un tableau de 10 éléments et n'en initialiser que 5. Soit vous initialisez tous les éléments (avec une liste), soit vous n'en initialisez aucun (valeurs par défaut).

2.5 Parcours des tableaux

  Exemple 6 — Boucle for classique

public class TestFor {
    public static void main(String[] args) {
        int[] nombres = {3, 5, 6, 8, 6, 7, 18, 19};

        for (int i = 0; i < nombres.length; i++) {
            System.out.println("Élément " + i + " : " + nombres[i]);
        }
    }
}
Sortie
Élément 0 : 3
Élément 1 : 5
Élément 2 : 6
Élément 3 : 8
Élément 4 : 6
Élément 5 : 7
Élément 6 : 18
Élément 7 : 19

  Exemple 7 — Boucle for-each (améliorée)

public class TestForeach {
    public static void main(String[] args) {
        double[] valeurs = {3.6, 5.0, 6, 8, 6, 7.76, 18, 19.5};

        // for-each : plus lisible, mais sans accès à l'indice
        for (double val : valeurs) {
            System.out.println(val);
        }
    }
}
Sortie
3.6
5.0
6.0
8.0
6.0
7.76
18.0
19.5
for vs for-each

Utilisez for-each quand vous n'avez pas besoin de l'indice. Utilisez for classique quand vous avez besoin de modifier les éléments ou d'accéder à l'indice.

2.6 Passage de tableaux à une méthode

Les tableaux étant des objets, leur référence est passée par valeur (copie de la référence). La méthode peut donc modifier les éléments du tableau.

  Exemple 8 — Passage de tableau

public class Test {
    public void afficher(int[] tab) {
        for (int elem : tab) {
            System.out.print(elem + " ");
        }
        System.out.println();
    }

    public void doubler(int[] tab) {
        for (int i = 0; i < tab.length; i++) {
            tab[i] *= 2;   // modification des éléments
        }
    }

    public static void main(String[] args) {
        int[] nombres = {3, 5, 6, 8};

        Test t = new Test();
        t.afficher(nombres);   // 3 5 6 8
        t.doubler(nombres);
        t.afficher(nombres);   // 6 10 12 16
    }
}

2.7 Retourner un tableau depuis une méthode

Une méthode peut renvoyer une référence à un tableau. Le type de retour inclut les crochets.

  Exemple 9 — Retour d'un tableau

public class Test {
    public int[] inverser(int[] tab) {
        int taille = tab.length;
        int[] resultat = new int[taille];

        for (int i = 0; i < taille; i++) {
            resultat[i] = tab[taille - 1 - i];
        }
        return resultat;
    }

    public static void main(String[] args) {
        int[] nombres = {3, 5, 6, 8, 6, 7, 18};
        Test t = new Test();
        int[] inverse = t.inverser(nombres);

        for (int val : inverse) {
            System.out.print(val + " ");
        }
        // Sortie : 18 7 6 8 6 5 3
    }
}

3. Tableaux à deux dimensions (2D)

Tableau à deux dimensions

Un tableau à deux dimensions est un tableau de tableaux. Il représente des données organisées en lignes et colonnes (matrice). Chaque élément est accessible par deux indices : tableau[ligne][colonne].

Tableau 2D

3.1 Déclaration et création

   
Syntaxe — Tableau 2D Java
typeDonnee[][] nomTableau = new typeDonnee[nbLignes][nbColonnes];

  Exemple 10 — Création d'une matrice

int[][] matrice = new int[3][4];        // 3 lignes × 4 colonnes
String[][] grille = new String[8][8];   // grille 8×8
double[][] notes = new double[10][5];   // 10 étudiants, 5 matières

3.2 Initialisation d'un tableau 2D

  Exemple 11 — Initialisation explicite

int[][] matrice = {
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11}
};

// Accès aux éléments
matrice[0][0] = 14;   // première ligne, première colonne
matrice[1][2] = 99;   // deuxième ligne, troisième colonne

3.3 Parcours d'un tableau 2D

  Exemple 12 — Parcours avec boucles imbriquées

public class Test {
    public void afficher(int[][] tab) {
        for (int i = 0; i < tab.length; i++) {           // parcours des lignes
            for (int j = 0; j < tab[i].length; j++) {    // parcours des colonnes
                System.out.print(tab[i][j] + " ");
            }
            System.out.println();  // nouvelle ligne
        }
    }

    public static void main(String[] args) {
        int[][] matrice = {
            {0, 1, 2, 3},
            {4, 5, 6, 7},
            {8, 9, 10, 11}
        };

        Test t = new Test();
        t.afficher(matrice);
    }
}
Sortie
0 1 2 3
4 5 6 7
8 9 10 11

3.4 Passage d'un tableau 2D à une méthode

  Exemple 13 — Méthode recevant un tableau 2D

public class Test {
    public void afficher(int[][] tab) {
        for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab[i].length; j++) {
                System.out.println("tab[" + i + "][" + j + "] = " + tab[i][j]);
            }
        }
    }

    public static void main(String[] args) {
        int[][] nums = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
        new Test().afficher(nums);
    }
}

4. Tableaux irréguliers (Ragged Arrays)

Tableau irrégulier

Un tableau irrégulier (ragged array) est un tableau à deux dimensions dont les lignes ont des longueurs différentes. C'est possible car chaque ligne est un tableau indépendant.

  Exemple 14 — Création d'un tableau irrégulier

// Étape 1 : déclarer le nombre de lignes (colonnes non définies)
int[][] triangle = new int[5][];

// Étape 2 : créer chaque ligne avec sa propre longueur
triangle[0] = new int[1];   // ligne 0 : 1 élément
triangle[1] = new int[2];   // ligne 1 : 2 éléments
triangle[2] = new int[3];   // ligne 2 : 3 éléments
triangle[3] = new int[4];   // ligne 3 : 4 éléments
triangle[4] = new int[5];   // ligne 4 : 5 éléments

// Remplir le triangle
for (int i = 0; i < triangle.length; i++) {
    for (int j = 0; j < triangle[i].length; j++) {
        triangle[i][j] = i + j;
    }
}

  Exemple 15 — Initialisation directe d'un tableau irrégulier

int[][] triangle = {
    {0},
    {0, 1},
    {0, 1, 2},
    {0, 1, 2, 3},
    {0, 1, 2, 3, 4}
};

for (int i = 0; i < triangle.length; i++) {
    for (int j = 0; j < triangle[i].length; j++) {
        System.out.print(triangle[i][j] + " ");
    }
    System.out.println();
}
Sortie
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4

5. Tableaux d'objets

Un tableau peut contenir des références vers des objets. Chaque élément est initialisé à null.

  Exemple 16 — Tableau d'étudiants

class Etudiant {
    private String nom;
    private double moyenne;

    public Etudiant(String nom, double moyenne) {
        this.nom = nom;
        this.moyenne = moyenne;
    }

    public void afficher() {
        System.out.println(nom + " : " + moyenne);
    }
}

public class Test {
    public static void main(String[] args) {
        // Déclaration et création du tableau (tous null)
        Etudiant[] promo = new Etudiant[3];

        // Création des objets individuels
        promo[0] = new Etudiant("Mostafa", 16.5);
        promo[1] = new Etudiant("Amal", 18.0);
        promo[2] = new Etudiant("Youssef", 14.5);

        // Parcours
        for (Etudiant e : promo) {
            e.afficher();
        }
    }
}

6. Tableau comparatif des types de tableaux

Type Déclaration Accès Mémoire
Tableau 1D int[] t = new int[10]; t[i] Contiguë
Tableau 2D rectangulaire int[][] t = new int[3][4]; t[i][j] Lignes de même longueur
Tableau 2D irrégulier int[][] t = new int[3][]; t[0]=new int[1];... t[i][j] Lignes de longueurs variables
Tableau d'objets Etudiant[] t = new Etudiant[5]; t[i].methode() Références (null par défaut)

7. Exercice

Statistiques sur tableau

Niveau : Débutant / Intermédiaire

Écrire un programme qui analyse un tableau d'entiers et calcule différentes statistiques.

Travail demandé

  1. Créer un tableau d'entiers de taille 10, initialisé avec des valeurs aléatoires entre 1 et 100
  2. Écrire une méthode int somme(int[] tab) qui retourne la somme des éléments
  3. Écrire une méthode double moyenne(int[] tab) qui retourne la moyenne
  4. Écrire une méthode int max(int[] tab) qui retourne la valeur maximale
  5. Écrire une méthode int min(int[] tab) qui retourne la valeur minimale
  6. Écrire une méthode int[] compterFrequences(int[] tab, int maxValeur) qui retourne un tableau des fréquences
  7. Afficher toutes les informations

  L'essentiel en bref

Synthèse — Tableaux en Java
  • Un tableau est une structure de données homogène et de taille fixe.
  • La déclaration : type[] nomTableau; (style recommandé).
  • La création : nomTableau = new type[taille]; — tous les éléments sont initialisés (0, 0.0, false, ou null).
  • L'initialisation explicite : {v1, v2, ...} — la taille est déduite.
  • L'accès : nomTableau[indice] — indice de 0 à length - 1.
  • La propriété length donne la taille (pas une méthode).
  • Les tableaux sont des objets : leur référence est passée aux méthodes, modification possible.
  • Les tableaux à deux dimensions sont des tableaux de tableaux — ils peuvent être irréguliers.
  • Erreurs fréquentes : oublier l'indice 0, dépasser la taille, confondre déclaration et création.
Un peu d'histoire

Les tableaux en Java sont hérités du langage C, mais avec une sécurité accrue : vérification automatique des bornes (ArrayIndexOutOfBoundsException), et intégration dans le système de types comme objets de première classe. Contrairement au C, Java n'autorise pas l'accès mémoire hors limites, éliminant toute une classe de bugs. L'attribut length et la boucle for-each (Java 5, 2004) simplifient considérablement le code. Pour des besoins de tableaux dynamiques, l'API java.util.ArrayList est généralement préférée.

Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.