CodeGym /Blog Java /Random-FR /Quelque chose à propos des tableaux
Auteur
Volodymyr Portianko
Java Engineer at Playtika

Quelque chose à propos des tableaux

Publié dans le groupe Random-FR
Salut! Auparavant, dans votre formation, nous avons travaillé avec des objets uniques (et des types primitifs). Mais que se passe-t-il si nous devons travailler avec tout un groupe d'objets au lieu d'un seul ? Par exemple, disons que nous voulons créer une liste des anniversaires de tous les employés de notre entreprise. Il doit contenir 30 chaînes formatées comme suit : "Sarah Huffman, 25 janvier" Nous allons bénéficier d'une structure de données spéciale appelée tableau . Si nous comparons un tableau à un objet réel, il est très similaire à un coffre-fort de banque avec des coffres-forts : Quelque chose à propos des tableaux - 1Un tableau se compose également de "boîtes". Vous pouvez mettre quelque chose (un élément) dans chaque case. Pour accéder à un élément, vous devez connaître son numéro de boîte (index). Voici comment un tableau est créé :

public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10];
      
   }
}
Ici, nous créons un tableau contenant 10 éléments. Vous pouvez immédiatement noter certaines caractéristiques du tableau :
  1. Il stocke des éléments d' un type de données bien défini . Si nous créons un tableau String, nous ne pouvons rien y stocker d'autre. Le type de données est spécifié lors de la création du tableau . C'est là qu'il diffère d'un coffre-fort (dans lequel un client peut stocker ce qu'il veut).

  2. Sa taille doit être précisée lors de la création du tableau . Vous ne pouvez pas l'indiquer ultérieurement ou modifier sa taille après la création du tableau .
Le fait que nous créons un tableau est indiqué par les crochets des deux côtés de l'expression. Ils peuvent être spécifiés avant ou après le nom de la variable de référence. Quoi qu'il en soit, cela fonctionnera :

String [] birthdays = new String[10];
String birthdays [] = new String[10];
Si vous voulez écrire quelque chose dans un tableau, vous devez spécifier l'index de la boîte où la valeur sera écrite. Les cases d'un tableau sont numérotées à partir de 0. Compter à partir de zéro est une pratique très courante en programmation. Plus vite vous vous y habituez, mieux c'est :) Quelque chose à propos des tableaux - 2 Cela signifie que si vous voulez mettre de la valeur dans la première case , vous faites ceci :

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
   }
}
Désormais, l'anniversaire de Jana est stocké dans la première cellule de notre tableau d'anniversaires d'employés : vous pouvez ajouter d'autres valeurs de la même manière :

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";
   }
}
Notez que nous avons ajouté l'anniversaire de Rosie à la huitième case (vous n'avez pas oublié pourquoi la case n°7 est la huitième case, n'est-ce pas ?) . Vous pouvez voir que nous n'avons pas rempli toutes les autres cellules. Nous n'avons pas besoin d'écrire les valeurs dans un tableau dans l'ordre. Il n'y a pas une telle exigence. Bien sûr, l'écriture des éléments dans l'ordre facilite grandement le suivi du nombre de cases libres et occupées, et évite que le tableau ait des "trous". Si vous souhaitez obtenir le contenu de l'un des coffres, alors (comme pour un coffre-fort), vous devez connaître son numéro. Voici comment c'est fait :

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       String rosieBirthday = birthdays[7];
       System.out.println(rosieBirthday);
   }
}
Sortie console : Rosie Mills, 3 janvier Nous avons créé une Stringvariable et dit au compilateur : « Trouvez la boîte avec l'index 7 dans le tableau des anniversaires, et affectez la valeur qu'elle contient à la Stringvariable rosieBirthday ». Et c'est exactement ce qu'il a fait. Lorsque vous travaillez avec des tableaux, nous pouvons facilement trouver leur longueur en utilisant une propriété spéciale : length .

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Sortie de la console : 10 Remarque : La lengthpropriété stocke la taille du tableau, pas le nombre de cases pleines. Notre tableau ne stocke que 3 valeurs, mais nous avons indiqué sa taille à 10 lors de sa création. Et c'est exactement la valeur que le lengthchamp renvoie. Pourquoi cela serait-il utile ? Eh bien, supposons que vous vouliez afficher une liste de tous les anniversaires (pour vérifier que personne n'est oublié). Vous pouvez le faire en une simple boucle :

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[2] = "Jeremiah Leonard, July 12";
       birthdays [3] = "Kenny Russo, September 7";
       birthdays[4] = "Tommie Barnes, November 9";
       birthdays [5] = "Roman Baranov, August 14";
       birthdays [6] = "Chanice Andersen, April 1";
       birthdays[7] = "Rosie Mills, January 3";
       birthdays [8] = "Keenan West, October 19";
       birthdays [9] = "Abraham McArthur, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
Dans la boucle, on déclare la variable i, qui est initialisée à zéro. A chaque passage, nous récupérons l'élément d'indice i de notre tableau et affichons sa valeur. La boucle fera 10 itérations, et i passera de 0 à 9 — et les nombres se trouvent être les indices des éléments de notre tableau ! En conséquence, nous afficherons toutes les valeurs de birthdays[0] à birthdays[9]. En fait, il existe une autre façon de créer un tableau. Par exemple, vous pouvez créer un tableau de ints comme ceci :

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Cette technique est appelée « initialisation de raccourci ». C'est assez pratique, car nous créons simultanément un tableau et le remplissons de valeurs. Nous n'avons pas à spécifier explicitement la taille du tableau : avec l'initialisation du raccourci, le lengthchamp est défini automatiquement.

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
Sortie de la console : 9 Maintenant, un peu sur la façon dont les tableaux sont stockés en mémoire. Disons que nous avons un tableau de trois Catobjets :

public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Behemoth");
       cats[2] = new Cat("Lionel Messi");
   }
}
Vous devez comprendre certaines choses ici :
  1. Dans le cas des primitives, un tableau stocke un ensemble de valeurs spécifiques (par exemple ints). Dans le cas des objets, un tableau stocke un ensemble de références .
    Le catstableau se compose de trois éléments, dont chacun est une référence à un Catobjet. Chacune des références pointe vers l'adresse mémoire où est stocké l'objet correspondant.

  2. Les éléments du tableau sont disposés en un seul bloc en mémoire. Ceci est fait pour leur permettre d'être accessibles rapidement et efficacement.
Ainsi, catsréférence le bloc de mémoire où sont stockés tous les objets (éléments du tableau). Cats[0]fait référence à une adresse spécifique dans ce bloc. Quelque chose à propos des tableaux - 3 Il est important de comprendre qu'un tableau ne se contente pas de stocker des objets : c'est un objet lui-même. Cela nous amène à nous demander si nous pouvons créer non seulement un tableau de chaînes ou de nombres, mais également des tableaux de tableaux . Et la réponse est oui, nous le pouvons ! Un tableau peut stocker n'importe quel objet, y compris d'autres tableaux. Un tel tableau est dit à deux dimensions . Si nous devions le représenter visuellement, il ressemblerait beaucoup à une table ordinaire. Supposons que nous voulions créer un tableau de 3 tableaux pouvant chacun stocker 10 ints. Cela ressemblerait à ceci :
Quelque chose à propos des tableaux - 4
Chaque ligne représente un inttableau. Le premier tableau contient des nombres de 1 à 10, le deuxième tableau - de -1 à -10 et le troisième - un ensemble de nombres aléatoires. Chacun de ces tableaux est stocké dans les cases de notre tableau à deux dimensions. Dans le code, l'initialisation d'un tableau à deux dimensions ressemble à ceci :

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Nos chats à deux dimensions stockent 3 tableaux avec 5 cases dans chaque tableau. Si nous voulons mettre un objet dans la troisième case du deuxième tableau, nous ferions ceci :

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluffy");
}
[1]indique le deuxième tableau et [2]indique la troisième case de ce tableau. Parce qu'un tableau à deux dimensions se compose de plusieurs tableaux, afin de le parcourir et d'afficher toutes ses valeurs (ou de remplir tous ses éléments), nous avons besoin d'une boucle imbriquée :

for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
Dans la boucle externe (variable i), nous parcourons tous les tableaux de notre tableau à deux dimensions. Dans la boucle interne (variable j), nous passons par tous les éléments de chaque tableau. En conséquence, cats[0][0] (premier tableau, premier élément) sera affiché en premier, suivi de cats[0][1] (premier tableau, deuxième élément). Après avoir parcouru le premier tableau, nous afficherons cats[1][0] , cats[1][1] , cats[1][2] , etc. Soit dit en passant, les tableaux à deux dimensions prennent également en charge initialisation abrégée :

int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalement, nous déclarerions le tableau à deux dimensions numberscomme un int[3][3], mais ce raccourci nous permet de spécifier les valeurs immédiatement. Pourquoi auriez-vous besoin d'un tableau à deux dimensions? Eh bien, vous pourriez en utiliser un pour recréer facilement le célèbre jeu "Battleship": Quelque chose à propos des tableaux - 5 Dans "Battleship", la structure du terrain de jeu peut être décrite facilement : un tableau bidimensionnel de 10 tableaux avec 10 éléments chacun. Vous créez deux de ces tableaux (un pour vous et un pour votre adversaire)

int[][] battleshipBoard1 = new int[10][10];
int[][] battleshipBoard2 = new int[10][10];
utilisez certaines valeurs (par exemple des nombres ou des symboles) pour remplir les éléments correspondant à l'emplacement de vos navires, puis appelez à tour de rôle les coordonnées d'éléments spécifiques :
  • cuirasséBoard1[0][2] !
  • Manquer! cuirasséBoard2[2][4] !
  • Frapper!
  • cuirasséBoard2[2][5] !
  • Frapper!
  • cuirasséBoard2[2][6] !,
  • Coulé !
Ceci conclut notre première introduction aux tableaux, mais ce n'est que le début de notre interaction avec eux. Dans les leçons suivantes, nous verrons des façons intéressantes de les utiliser, et nous apprendrons également quelles fonctions intégrées Java a pour nous permettre de travailler avec cette structure de données plus facilement :)
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION