« Amigo, j'espère que vous avez maintenant réalisé à quel point les tableaux sont utiles en programmation ? »

« Certainement, Rishi ! J'ai déjà résolu plus d'une tâche.

"Vos tâches comportaient-elles des actions répétitives ? ​​Le genre de choses que vous avez faites encore et encore."

« Si je vous ai bien compris, vous voulez dire des actions similaires dans différentes tâches ? Par exemple, utiliser partout une boucle pour afficher le contenu d'un tableau — j'en ai tellement marre de faire ça !

"Oui, c'est ce que je veux dire. Les créateurs de Java ont remarqué que les programmeurs Java écrivent souvent le même code lorsqu'ils travaillent avec des tableaux. Par exemple, du code pour copier une partie d'un tableau dans un autre tableau, ou du code pour remplir chaque cellule d'un tableau avec le même ou votre exemple : code pour afficher le contenu d'un tableau sous une forme lisible à l'écran.

"Et les vrais programmeurs ont une règle très importante : ne vous répétez pas. Vous conviendrez qu'il est mal de faire du travail superflu - vous ne serez pas payé pour cela. Un travail efficace est bien payé, croyez-moi. code est immédiatement reconnaissable par la grande quantité de code répétitif.

"Les créateurs de Java ont réfléchi à cela et ont créé la Arraysclasse spéciale (son nom complet est java.util.Arrays), en y mettant les actions liées aux tableaux les plus populaires."

"Hmm... Très intéressant. Alors qu'est-ce qu'il a exactement ?

"Il a beaucoup de méthodes pour chaque occasion, mais nous allons d'abord en considérer seulement 10 - les plus simples et les plus souvent utilisées.

Arrays.toString()

"La première méthode que nous allons examiner est Arrays.toString(). Mais d'abord, un peu de contexte.

"Chaque tableau en Java a une toString()méthode qui renvoie une 'représentation textuelle du tableau'. Vous pouvez obtenir une représentation textuelle d'un tableau en utilisant l'instruction suivante :

String str = name.toString();

"Où nameest le nom de la variable tableau, et strest le nom de la variable qui stockera la représentation sous forme de chaîne du tableau. Amigo, avez-vous essayé d'imprimer un tableau à l'écran en utilisant la méthode ?System.out.println(name)

J'avoue que c'est arrivé. J'ai vu du charabia. J'ai décidé de rester hors de danger et de continuer à utiliser des boucles.

"Vous avez probablement vu quelque chose comme :

I@37afeb11

"La première lettre Isignifie qu'il s'agit d'un inttableau, et les symboles après @sont l'adresse d'un seul objet en mémoire. Vous pouvez le considérer comme l'adresse du tableau en mémoire. D'une part, c'est précisément l'information stockée dans le variable de tableau, mais d'un autre côté, vous vous attendiez à quelque chose de différent, n'est-ce pas ?"

"Exactement ! J'avais l'intention de voir les valeurs dans le tableau. C'était la dernière chose à laquelle je m'attendais."

"Et c'est exactement pourquoi ils ont trouvé la Arrays.toString()méthode - pour afficher les valeurs d'un tableau. Nous l'appelons comme ceci :

String str = Arrays.toString(name);

Exemples:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
La strvariable contiendra la chaîne"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
La strvariable contiendra la chaîne"[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
La strvariable contiendra la chaîne"[Hi, How's, life?]"

Arrays.deepToString()

"Cependant, la toString()méthode n'est pas adéquate lorsqu'il s'agit de tableaux à deux dimensions. En d'autres termes, si vous essayez d'appeler Arrays.toString(), vous verrez quelque chose de familier :

[I@37afeb11, I@37afeb21, I@37afeb31]

"Tout cela est dû au fait que les cellules d'un tableau à deux dimensions stockent des références à des tableaux à une dimension. Et comment les tableaux à une dimension sont-ils convertis en chaîne ? Exactement comme vous le voyez ci-dessus.

"Que faire alors ? Comment afficher correctement un tableau à deux dimensions ?"

"Les créateurs de Java ont également anticipé cela. À cette fin, la Arraysclasse a une autre méthode spéciale - deepToString(). L'appeler ressemble à ceci :

String str = Arrays.deepToString(name);

"Cette méthode peut être transmise à des tableaux à deux dimensions, à une dimension, à trois dimensions ou, en général, à n'importe quelle dimension, et elle affichera toujours les éléments du tableau.

Exemples:

int[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
La strvariable contiendra la chaîne"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
La strvariable contiendra la chaîne"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
La strvariable contiendra la chaîne"[[[1, 2, 3], [1]], [[]]]"

Arrays.equals()

"Nous avons compris comment afficher des tableaux à l'écran. Qu'en est-il de la comparaison de tableaux ? Vous souvenez-vous des méthodes que nous pouvons utiliser pour comparer des chaînes ?"

"J'utilise habituellement la equalsméthode!

"Oui, equals, et aussi equalsIgnoreCase(qui compare les chaînes sans tenir compte des majuscules et des minuscules).

"Bonne nouvelle : vous pouvez également utiliser la equalsméthode pour les tableaux. Mauvaise nouvelle : elle ne compare pas le contenu des tableaux. La equalsméthode des tableaux fait la même chose que l' ==opérateur : elle compare les références.

Exemples:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1 == x2;
false(les références ne sont pas égales)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
La equalsméthode arrayscompare simplement les références de deux tableaux.

false(les références ne sont pas égales)

"Alors, qu'est-ce qu'on fait ? Comment comparer les tableaux en fonction de leur contenu ?"

"Encore une fois, la Arraysclasse vient à notre secours. Plus précisément, sa Arrays.equals()méthode. Voici comment nous l'appelons :

Arrays.equals(name1, name2)

"La méthode retourne truesi les tableaux sont de longueur égale et leurs éléments sont égaux. Sinon, elle retourne false.

Exemples:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
La equalsméthode arrayscompare simplement les références de deux tableaux.

false(les références ne sont pas égales)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true(le contenu est égal)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false(le contenu des tableaux est différent)

Arrays.deepEquals()

"Et, comme vous l'avez probablement déjà deviné, la Arrays.equalsméthode ne fonctionnera pas correctement pour les tableaux à deux dimensions : elle traite les tableaux à deux dimensions comme un tableau à une dimension dont les éléments sont des adresses de tableaux à une dimension.

"Ainsi, pour comparer correctement les tableaux multidimensionnels ( n = 1, 2, 3,... ), ils ont trouvé la Arrays.deepEquals()méthode. L'appeler ressemble à ceci :

Arrays.deepEquals(name1, name2)

"La méthode retourne truesi les tableaux sont de longueur égale et leurs éléments sont égaux. Sinon, elle retournefalse. Si les éléments à l'intérieur du tableau sont également des tableaux, alors la Arrays.deepEquals()méthode est utilisée pour les comparer, et ainsi de suite.

Exemples:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

x1.equals(x2);
La equalsméthode arrays compare simplement les références de deux tableaux.

false(les références ne sont pas égales)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.equals(x1, x2);
La Arrays.equalsméthode comparera et en tant que tableaux unidimensionnels qui stockent les références. Ils contiennent différentes références. (le contenu des tableaux n'est pas égal) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.deepEquals(x1, x2);



true(le contenu est égal)

"Merci, Rishi ! Cette leçon est exactement ce dont j'avais besoin pour rendre ma vie plus facile et plus heureuse à l'avenir. Maintenant, je vais utiliser les méthodes de la classe Arrays et écrire mes programmes encore plus rapidement.

"C'est ce sur quoi je comptais, ha-ha. Mais ce ne sont pas toutes les méthodes intéressantes de la classe Arrays. Je vous parlerai des autres la prochaine fois."