Notes sur les tableaux



En JAVA les tableaux se manipulent exactement de la meme facon qu'en C. Il suffit de se rappeler qu'un handler en JAVA n'est rien d'autre qu'un pointeur deguise (en C).

L'exemple suivant illustre la manipulation des tableaux en JAVA.

Fichier test.java
public class test
{
  public static void main (String[] atgv)
  {
    int[] tab1;
    tab1 = new int[4];

    for (int i=0; i< 4; i++) { tab1[i] = (i+1)*10; }
    System.out.println("-- Affichage du tableau d'entiers --");
    for (int i=0; i< 4; i++) { System.out.println(tab1[i]); }

    conteneur[] tab2;
    tab2 = new conteneur[4];
    for (int i=0; i< 4; i++) { tab2[i] = new conteneur((i+1)*11); }
    System.out.println("-- Affichage du tableau d'objet 1 --");
    for (int i=0; i< 4; i++) { System.out.println(tab2[i].val); }

    conteneur[] tab3 = { new conteneur(111), new conteneur(222), new conteneur(333), new conteneur(444) };
    System.out.println("-- Affichage du tableau d'objet 2 --");
    for (int i=0; i< 4; i++) { System.out.println(tab3[i].val); }

    // attention l'ecriture suivante est fausse !
    // conteneur[] tab3;
    // tab3 = { new conteneur(111), new conteneur(222), new conteneur(333), new conteneur(444) };

    // les handles sue les tableaux se manipulent comme des pointeurs en C
    tab3 = tab2;
    System.out.println("-- Affichage du tableau d'objet 3 --");
    for (int i=0; i< 4; i++) { System.out.println(tab3[i].val); }
    // Les "anciens elements" de tab2 ne sont plus references. Par consequent ils
    // seront elimines de la memoire par le "garbage collector".
        
    // pour "detruire" les elements du tableau tab3:
    for (int i=0; i< 4; i++) { tab3[i] = null; }
    // ou plus simplement: tab3 = null
    
    conteneur[] tab4;
    tab4 = new conteneur[4];
    for (int i=0; i< 4; i++) { tab4[i] = new conteneur((i+1)*11); }

    derive[] tab5;
    tab5 = new derive[4];
    for (int i=0; i< 4; i++) { tab5[i] = new derive((i+2)*11); }

    // "sur casting" des handles sur tableau
    tab4 = tab5;
    System.out.println("-- Affichage du tableau d'objet 4 --");
    for (int i=0; i< 4; i++) { System.out.println(tab5[i].val); }
    // attention "tab5 = tab4" provoque une erreur de compilation (perte d'information)

    // allocation dynamique d'un tableau de taille donnee
    int taille = 10;
    conteneur[] tab6 = new conteneur[taille];

    //tableau a deux dimensions
    int[][] tab7 = new int[4][3];
    for (int i=0; i< 4; i++)
        for (int j=0; j< 3; j++)
            tab7[i][j] = i+j;
            

    // passage d'argument - > > > > exactement comme en C/C++ < < < <
    int[] tab8 = new int[10];
    for (int i=0; i< tab8.length; i++) tab8[i]=i;
    int[] tab9 = doubler(tab8);
    System.out.println("-- Affichage du tableau d'objet 5 --");
    for (int i=0; i< tab9.length; i++) { System.out.println(tab9[i]); }

    // copie de tableau
    int[] tab10 = new int[5];
    int[] tab11 = new int[5];
    for (int i=0; i< 5; i++) tab10[i] = i+1;
    if (copie (tab10, tab11) == false)
       System.out.println("Erreur de copie");
    else
       {
         System.out.println("Copie effectuee avec succes");
         System.out.println("-- Affichage de tableau 6 --");
         for (int i=0; i< 5; i++) System.out.println(tab11[i]);
         
       }
    
  }

  static int[] doubler(int[] tab)
  {
    for (int i=0; i< tab.length; i++) tab[i]=2*tab[i];
    return tab;
  }

  static boolean copie(int[] src, int[] dest)
  {
    if ((src.length) > (dest.length)) return false;
    
    for (int i=0; i< src.length; i++) dest[i]=src[i];
    return true;
  }

}

class conteneur
{
  int val;
  
  conteneur(int v) { val = v; }
  conteneur() { val = 0; }
  void SetVal (int v) { val = v; }
}

class derive extends conteneur
{
  int val;
  void SetVal (int v) { val = v; }
  derive(int v) { val = v; }
}


A l'execution on obtient l'affichage suivant:

-- Affichage du tableau d'entiers --
10
20
30
40
-- Affichage du tableau d'objet 1 --
11
22
33
44
-- Affichage du tableau d'objet 2 --
111
222
333
444
-- Affichage du tableau d'objet 3 --
11
22
33
44
-- Affichage du tableau d'objet 4 --
22
33
44
55
-- Affichage du tableau d'objet 5 --
0
2
4
6
8
10
12
14
16
18
Copie effectuee avec succes
-- Affichage de tableau 6 --
1
2
3
4
5