JavaRush /Blog Java /Random-FR /Quelque chose à propos des tableaux en Java

Quelque chose à propos des tableaux en Java

Publié dans le groupe Random-FR
Bonjour! Auparavant, lors de la formation, nous travaillions avec des objets uniques (ou types primitifs). Mais que se passe-t-il si nous devons travailler non pas avec un seul objet, mais avec tout un groupe ? Par exemple, nous souhaitons créer une liste des anniversaires de tous les employés de notre entreprise. Il doit contenir, disons, 30 lignes au format : « Andrey Petrov, 25 janvier ». Une structure de données spéciale, un tableau, nous aidera ici. Si vous comparez le tableau avec des objets de la vie réelle, sa structure est très similaire à celle d'un coffre-fort de banque avec des cellules : Quelque chose à propos des tableaux en Java - 1le tableau est également constitué de cellules. Vous pouvez mettre quelque chose dans chaque cellule. Dans ce cas, pour accéder au contenu, vous devez connaître le numéro de portable. Le tableau est créé comme ceci :
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // array of Java strings

   }
}
Ici, nous avons créé un tableau de 10 cellules. Vous pouvez immédiatement prêter attention à certaines caractéristiques du tableau :
  1. Il stocke des données d'un type strictement défini. Si nous avons initialement créé un tableau de chaînes String, nous ne pourrons rien y stocker d'autre. Le type de données est spécifié lors de la création du tableau. C'est ce qui le distingue d'un coffre-fort, dans lequel le client peut stocker ce qu'il veut.
  2. Un tableau peut stocker des données de types primitifs (par exemple, int), des chaînes ( String) ou des objets de la même classe. Plus précisément, pas même les objets eux-mêmes, mais des liens vers ces objets.
  3. La taille du tableau doit être précisée lors de la création. Vous ne pourrez pas le spécifier ultérieurement ni le redimensionner après sa création.
Java indique qu'un tableau est créé en utilisant des 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 - cela fonctionnera dans les deux cas :
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Si vous souhaitez écrire quelque chose dans un tableau, vous devez spécifier le numéro de la cellule dans laquelle la valeur sera écrite. Les numéros de cellules du tableau commencent à 0. Partir de zéro est une pratique courante en programmation. Plus vite vous vous y habituerez, mieux ce sera :) Quelque chose à propos des tableaux en Java - 2Autrement dit, si vous souhaitez mettre une valeur dans la première cellule du tableau , procédez comme ceci :
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
Désormais, la première cellule de notre tableau, qui contient les anniversaires des collègues, contient une chaîne avec l'anniversaire de Lena. Par analogie, vous pouvez ajouter d'autres valeurs :
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";
   }
}
Attention : nous avons ajouté l'anniversaire d'Olesya à la huitième cellule (avez-vous oublié pourquoi la cellule n°7 est la huitième ?). Bien que toutes les autres cellules ne soient pas remplies. Il n'est pas nécessaire d'écrire les valeurs dans le tableau dans l'ordre - il n'y a pas de telle restriction. D'un autre côté, si vous écrivez dans l'ordre, il sera beaucoup plus facile de suivre le nombre de cellules libres et occupées, et il n'y aura plus de « trous » dans le tableau. Si vous souhaitez obtenir le contenu d'une cellule d'un tableau, comme dans le cas d'une cellule bancaire, vous devez connaître son numéro. Cela se fait comme ceci :
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       String olesyaBirthday = birthdays[7];
       System.out.println(olesyaBirthday);
   }
}
Sortie de la console :

Олеся Остапенко, 3 января
Nous avons créé une variable Stringet dit au compilateur : « Trouvez la cellule avec l'index 7 dans le tableau birthdayset attribuez la valeur qui y est stockée à la variable String olesyaBirthday. » C'est exactement ce qu'il a fait.

Longueur du tableau Java

Lorsque vous travaillez avec un tableau, vous pouvez facilement connaître sa longueur à l'aide d'une propriété spéciale - length.
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
Sortie de la console :

10
Note:La propriété lengthstocke la taille du tableau, pas le nombre de cellules remplies. Notre tableau ne stocke que 3 valeurs, mais lorsque nous l'avons créé, nous lui avons spécifié size = 10. C'est la valeur renvoyée par le champ length. Pourquoi cela pourrait-il être utile ? Eh bien, par exemple, si vous souhaitez imprimer une liste de tous les anniversaires sur la console (pour vérifier que personne n'a été 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] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[2] = "Vika Ignatova, July 12";
       birthdays[3] = "Denis Kozlov, September 7";
       birthdays[4] = "Maxim Maslennikov, November 9";
       birthdays[5] = "Roman Baranov, August 14";
       birthdays[6] = "Valery Pyatkina, April 1";
       birthdays[7] = "Olesya Ostapenko, January 3";
       birthdays[8] = "Kostya Gurko, October 19";
       birthdays[9] = "Seryozha Naumov, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
Dans la boucle, nous créons une variable iinitialement égale à zéro. À chaque passage, nous prenons la cellule d'index i de notre tableau et imprimons sa valeur sur la console. La boucle fera 10 itérations, et les valeurs de i passeront de 0 à 9 - juste en fonction des indices des cellules de notre tableau ! De cette façon, nous imprimerons toutes les valeurs de birthdays[0]à sur la console birthdays[9] . En fait, il existe des moyens de créer un tableau différemment. Par exemple, un tableau de nombres intpeut être créé comme ceci :
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Cette méthode est appelée « initialisation rapide ». C'est très pratique dans la mesure où nous créons immédiatement un tableau et le remplissons de valeurs. Il n'est pas nécessaire de spécifier explicitement la taille du tableau - le champ lengthsera rempli automatiquement lors d'une initialisation rapide.
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

Tableau d'objets Java

Vous avez déjà entendu dire que les tableaux d'objets et les tableaux de primitives sont stockés différemment en mémoire. Prenons par exemple un tableau de trois objets Cat:
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("Hippopotamus");
       cats[2] = new Cat("Philip Markovich");
   }
}
Il y a quelques choses à comprendre ici :
  1. Dans le cas des primitives, les tableaux Java stockent de nombreuses valeurs spécifiques (telles que des nombres int). Dans le cas des objets, un tableau stocke de nombreuses références. Le tableau catsse compose de trois cellules, chacune contenant une référence à un objet Cat. Chacun des liens pointe vers une adresse en mémoire où cet objet est stocké.
  2. Les éléments du tableau sont stockés en mémoire dans un seul bloc. Ceci est fait pour un accès plus efficace et plus rapide à eux. Ainsi, le lien catspointe vers un bloc en mémoire où sont stockés tous les objets - les éléments du tableau. A cats[0]- à une adresse spécifique dans ce bloc.
Quelque chose à propos des tableaux en Java - 3Il est important de comprendre qu’un tableau peut non seulement stocker des objets, mais qu’il est lui-même un objet.

Tableau de tableaux ou tableau bidimensionnel

Sur cette base, nous sommes confrontés à la question : pouvons-nous créer, par exemple, non pas un tableau de chaînes ou de nombres, mais un tableau de tableaux ? Et la réponse sera : oui, nous le pouvons ! Un tableau peut stocker n’importe quel objet, y compris d’autres tableaux. Un tel tableau sera dit bidimensionnel. Si vous le représentez sur une image, il ressemblera beaucoup à un tableau ordinaire. Par exemple, nous voulons créer un tableau qui stockera 3 tableaux de nombres intde 10 cellules chacun. Cela ressemblera à ceci : Quelque chose à propos des tableaux en Java - 4Chaque ligne représente un tableau de nombres int. Le premier tableau contient des nombres de 1 à 10, le deuxième de -1 à -10, le troisième un ensemble de nombres aléatoires. Chacun de ces tableaux est stocké dans une cellule de notre tableau bidimensionnel. L'initialisation d'un tableau à deux dimensions dans le code ressemble à ceci :
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Notre tableau de chats bidimensionnel stocke 3 tableaux de 5 cellules chacun. Si nous voulons mettre notre objet dans la troisième cellule du deuxième tableau, nous procédons comme ceci :
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]pointe vers le deuxième tableau et [2]pointe vers la troisième cellule de ce tableau. Puisqu'un tableau bidimensionnel est constitué de plusieurs tableaux, pour le parcourir et imprimer toutes les valeurs sur la console (ou remplir toutes les cellules), nous avons besoin d'une double 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 à tour de rôle tous les tableaux qui composent notre tableau bidimensionnel. Dans la boucle interne (variable j), nous parcourons toutes les cellules de chaque tableau. En conséquence, l'objet cats[0][0](premier tableau, première cellule) sera affiché en premier sur la console, et le deuxième objet le sera cats[0][1](premier tableau, deuxième cellule). Lorsque le premier tableau est épuisé, , cats[1][0], cats[1][1]et cats[1][2]ainsi de suite seront affichés. À propos, une initialisation rapide est également disponible pour les tableaux à deux dimensions :
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalement, nous écrivions un tableau à deux dimensions numberssous la forme int[3][3], mais cette méthode nous permet de spécifier immédiatement les valeurs. Pourquoi un tableau bidimensionnel pourrait-il être nécessaire ? Eh bien, par exemple, avec son aide, vous pouvez facilement recréer le célèbre jeu « Battleship » : Quelque chose à propos des tableaux en Java - 5la structure du terrain de jeu dans « Battleship » est telle qu'elle peut être facilement décrite : un tableau bidimensionnel de 10 tableaux de 10 cellules chacun . Vous créez deux de ces tableaux - pour vous et votre adversaire :
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
Vous remplissez avec quelques valeurs (par exemple, des chiffres ou des signes *) les cellules dans lesquelles se trouvent vos navires, puis vous et votre adversaire appelez à tour de rôle les numéros de cellule :
  • bataille maritime[6][5] !
  • Passé! SeaBattle2[6][6] !
  • Blessé!
  • SeaBattle2[6][7] !
  • Blessé!
  • seaBattle2[6][8]!,
  • Tué!

Ressources supplémentaires sur les tableaux

Vous voulez en savoir plus sur les tableaux ? Veuillez jeter un œil aux articles ci-dessous. Il existe de nombreuses informations intéressantes et utiles sur ce sujet.
  1. Tableaux en Java - un article détaillé sur les tableaux, leur création, leur initialisation et leur utilisation. Avec des exemples.
  2. La classe Arrays et son utilisation - l'article décrit quelques méthodes de la classeArray
  3. Arrays est la première conférence JavaRush dédiée aux tableaux.
  4. Tableaux multidimensionnels - un article détaillé sur les tableaux multidimensionnels avec des exemples.
  5. Renvoie un tableau de longueur nulle, pas nul - Joshua Bloch, auteur d'Effective Programming, explique comment mieux renvoyer des tableaux vides.
Ceci conclut notre première connaissance des tableaux, mais ce n'est que le début de l'interaction avec eux. Dans les conférences suivantes, nous verrons des façons intéressantes de les utiliser, et découvrirons également les fonctions intégrées de Java pour travailler plus facilement avec cette structure de données :)
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION