1.Arrays.fill()

Lorsqu'ils travaillent avec des tableaux, les programmeurs Java doivent très souvent remplir le tableau avec la même valeur. Vous pouvez, bien sûr, écrire une boucle et simplement attribuer une valeur à chaque cellule du tableau dans la boucle :

int[] x = new int[100];
for (int i = 0; i < x.length; i++)
x[i] = 999;

Ou vous pouvez simplement appeler la Arrays.fill()méthode, qui fait exactement la même chose : elle remplit le tableau passé avec la valeur passée. Voici à quoi ça ressemble :

Arrays.fill(name, value)

Et le code de l'exemple ci-dessus peut être rendu un peu plus compact et plus clair :

int[] x = new int[100];
Arrays.fill(x, 999);

Vous pouvez également utiliser la Arrays.fill()méthode pour remplir non pas tout le tableau, mais une partie de celui-ci, avec une certaine valeur :

Arrays.fill(name, first, last, value)

Où premier et dernier sont les indices des première et dernière cellules à remplir.

Conformément à la bonne vieille tradition de Java, rappelez-vous que le dernier élément n'est pas inclus dans la gamme.

Exemple:

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

Arrays.fill(x, 3, 7, 999);


String str = Arrays.toString(x);


Nous remplissons les cellules x[3], x[4], x[5]et x[6]avec la valeur 999. Les cellules d'un tableau sont numérotées à partir de zéro !

La strvariable contient la valeur :
"[1, 2, 3, 999, 999, 999, 999, 8, 9, 10]"

La Arrays.fill()méthode ne fonctionne qu'avec des tableaux unidimensionnels. Si vous passez un tableau à deux dimensions à la méthode, il sera traité comme unidimensionnel, avec toutes les conséquences qui en découlent.



2.Arrays.copyOf()

Comme vous le savez déjà, vous ne pouvez pas redimensionner un tableau après sa création.

Et si vous le vouliez vraiment ?

Eh bien, si vous le voulez vraiment, vous le pouvez !

  • Créer un nouveau tableau de la longueur souhaitée
  • Copiez-y tous les éléments du premier tableau.

Au fait, c'est exactement ce que Arrays.copyOf()fait la méthode. Voici à quoi ressemble l'appel :

Type[] name2 = Arrays.copyOf(name, length);

Cette méthode ne modifie pas le tableau existant , mais crée à la place un nouveau tableau et y copie les éléments de l'ancien tableau.

Si les éléments ne correspondent pas (la longueur est inférieure à la longueur du tableau existant ), les valeurs supplémentaires sont ignorées.

Si la longueur du nouveau tableau est supérieure à la longueur de l'ancien, les cellules sont remplies de zéros.

Exemple:

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

int[] x2 = Arrays.copyOf(x, 5);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOf(x, 15);
String str3 = Arrays.toString(x3);


La str2variable contient la valeur :
"[1, 2, 3, 4, 5]"

La str3variable contient la valeur :
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0]"

3.Arrays.copyOfRange()

Et que se passe-t-il si vous voulez obtenir un tableau de longueur 5 à partir d'un tableau de longueur 10, mais que vous en avez besoin pour contenir les 5 derniers éléments plutôt que les 5 premiers ?

Dans ce cas, une autre méthode de la Arraysclasse sera utile - le Arrays.copyOfRange(). Voici à quoi cela ressemble lorsque nous l'appelons :

Type[] name2 = Arrays.copyOfRange(name, first, last);

Cette méthode crée également un nouveau tableau, mais le remplit avec des éléments d'un emplacement arbitraire dans le tableau d'origine. Où premier et dernier sont les indices des premier et dernier éléments qui doivent être placés dans le nouveau tableau.

Conformément à la bonne vieille tradition de Java, rappelez-vous que le dernier élément n'est pas inclus dans la gamme.

Exemple:

int[] x = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};

int[] x2 = Arrays.copyOfRange(x, 5, 10);
String str2 = Arrays.toString(x2);

int[] x3 = Arrays.copyOfRange(x, 5, 15);
String str3 = Arrays.toString(x3);


La str2variable contient la valeur :
"[16, 17, 18, 19, 20]"

La str3variable contient la valeur :
"[16, 17, 18, 19, 20, 0, 0, 0, 0, 0]"


4.Arrays.sort()

Ah, la plus délicieuse des friandises : le tri . Les tableaux sont triés assez souvent en programmation. Les trois actions les plus courantes lors de l'utilisation de tableaux sont :

  • Trier un tableau
  • Trouver l'élément minimum (ou maximum) d'un tableau
  • Détermination de l'index d'un élément dans un tableau (trouver un élément dans un tableau)

C'est précisément pourquoi les créateurs de Java ont inclus la sort()méthode dans la Arraysclasse. Voici à quoi ressemble l'appel :

Arrays.sort(name);

Cette méthode trie le tableau passé dans l'ordre croissant.

Exemple:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x);

String str = Arrays.toString(x);



La strvariable contient la valeur :
"[-20, -20, -20, -2, 0, 3, 8, 11, 99, 999]"

Excellent, non ? Vous avez appelé une méthode et vous avez maintenant un tableau trié. Beau.

Au fait, vous pouvez utiliser cette méthode pour trier non seulement le tableau entier, mais seulement une partie de celui-ci. Voici à quoi ressemble l'appel :

Arrays.sort(name, first, last);

premier et dernier sont les indices des première et dernière cellules que le tri doit toucher.

Conformément à la bonne vieille tradition de Java, rappelez-vous que le dernier élément n'est pas inclus dans la gamme.

Exemple:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};

Arrays.sort(x, 4, 8);
String str = Arrays.toString(x);


La strvariable contient la valeur :
"[11, -2, 3, 0, -20, -20, 8, 999, 99, -20]"

Pour trier les tableaux, Java utilise l'algorithme de tri le plus rapide — QuickSort . Sa complexité de calcul dépend de la taille du tableau et est calculée à l'aide de la formule N log(N).

Le tri d'un tableau de 1000 éléments impliquera environ 3000 comparaisons d'éléments de tableau. Le tri d'un tableau d'un million d'éléments impliquera environ 6 millions de comparaisons.



5.Arrays.binarySearch()

Eh bien, et la dernière des méthodes les plus intéressantes de la Arraysclasse est capable de rechercher une valeur donnée dans un tableau. Ce n'est pas une recherche ordinaire - c'est la recherche binaire bien-aimée . Cela se résume à ceci :

  • Tout d'abord, le tableau est trié.
  • Ensuite, l'élément du milieu du tableau est comparé à celui que nous recherchons.
  • Si l'élément est supérieur à l'élément du milieu, la recherche se poursuit dans la moitié droite du tableau.
  • Si l'élément que nous recherchons est inférieur à l'élément du milieu, la recherche se poursuit dans la moitié gauche du tableau.

Comme le tableau est trié, il est possible d'en éliminer la moitié en une seule comparaison. Ensuite, à l'étape suivante, nous jetons une autre moitié, et ainsi de suite.

Cette approche rend la recherche binaire très rapide. Dans un tableau d'un million (!) d'éléments, il peut trouver l'index de l'élément souhaité en seulement 20 comparaisons. L'inconvénient de l'approche est que le tableau doit d'abord être trié, et le tri prend également du temps.

Voici à quoi ressemble l'appel :

int index = Arrays.binarySearch(name, value);

nameest le nom du tableau, qui doit être passé déjà trié (par exemple, en utilisant la Arrays.sort()méthode ). Et valueest l'élément que nous recherchons dans le tableau. Le résultat renvoyé par la méthode est l' indice de l'élément de tableau souhaité .

Exemples:

int[] x = {11, -2, 3, 0, 999, -20, 8, -20, 99, -20};
Arrays.sort(x);

int index1 = Arrays.binarySearch(x, 0);
int index2 = Arrays.binarySearch(x, -20);
int index3 = Arrays.binarySearch(x, 99);
int index4 = Arrays.binarySearch(x, 5);
xest:
{-20, -20, -20, -2, 0, 3, 8, 11, 99, 999}

4
1(les indices 0et 2sont également acceptables)
8
-7

Si le tableau contient plusieurs instances de l'élément recherché, l'algorithme renverra simplement l'index de l'un d'entre eux (il n'y a aucune garantie que ce sera, disons, le tout premier, ou vice versa - le tout dernier de ces éléments en double)."

Si l'élément n'est pas trouvé dans le tableau, alors l'indice sera négatif.



6. Lien vers la documentation Oracle sur la Arraysclasse

Si vous êtes super intéressé, vous pouvez tout lire sur la Arraysclasse et toutes ses méthodes dans la documentation officielle a href="https://docs.oracle.com/en/java/javase/14/docs/api/java.base /java/util/Arrays.html">sur le site Web d'Oracle.

Par exemple, vous pouvez en savoir plus sur les méthodes Arrays.mismatch()et Arrays.compare(). Peut-être que vous les trouverez utiles d'une manière ou d'une autre.

Et ne soyez pas confus par le nombre de méthodes. Chaque méthode a 5 à 10 variantes, qui ne diffèrent que par leurs types de paramètres.