96 votes

Dans un tableau 2D, qu'est-ce qui vient en premier, les lignes ou les colonnes ?

Lors de la création d'un tableau 2D, comment se rappeler si les lignes ou les colonnes sont spécifiées en premier ?

108voto

MrHappyAsthma Points 1985

Java spécifie des tableaux similaires à ceux d'une configuration "row major", ce qui signifie qu'il indexe les rangées en premier. Cela s'explique par le fait qu'un tableau 2D est un "tableau de tableaux".

Par exemple :

int[ ][ ] a = new int[2][4];  // Two rows and four columns.

a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

On peut aussi le visualiser de la façon suivante :

a[0] ->  [0] [1] [2] [3]
a[1] ->  [0] [1] [2] [3]

La deuxième illustration montre l'aspect "tableau de tableaux". Le premier tableau contient {a[0] and a[1]} et chacun d'entre eux est un tableau contenant quatre éléments, {[0][1][2][3]} .

Le résumé TL;DR :

Array[number of arrays][how many elements in each of those arrays]

Pour plus d'explications, voir également Tableaux - 2-dimensionnels .

20voto

Matt B Points 1763

Instinctivement, on pense de manière géométrique : axe horizontal (X) puis axe vertical (Y). Ce n'est cependant pas le cas avec un tableau 2D, les lignes viennent en premier et ensuite les colonnes.

Considérons l'analogie suivante : en géométrie, on se dirige vers l'échelle (axe X) et on la gravit (axe Y). À l'inverse, en Java, on descend l'échelle (lignes) et on s'en éloigne (colonnes).

20voto

Kevin Welker Points 2990

Bien que Matt B soit vrai dans un sens, il peut être utile de penser aux tableaux multidimensionnels de Java sans penser du tout aux matrices géométriques. Les tableaux multidimensionnels Java sont simplement des tableaux de tableaux, et chaque élément de la première "dimension" peut être de taille différente des autres éléments, ou en fait peut stocker un "sous"-tableau nul. Voir les commentaires sous cette question

6voto

Tout dépend de la façon dont vous visualisez le tableau. Les rangées et les colonnes sont des propriétés de visualisation (probablement dans votre imagination) du tableau, et non le tableau lui-même.

C'est exactement la même chose que de demander si le numéro "5" est rouge ou vert ?

Je pourrais le dessiner en rouge, je pourrais le dessiner en vert, non ? La couleur n'est pas une propriété intégrale d'un nombre. De la même manière, représenter un tableau 2D comme une grille de lignes et de colonnes n'est pas nécessaire à l'existence de ce tableau.

Le tableau 2D vient de première dimension y deuxième dimension tout ce qui est lié à la visualisation de ces derniers est purement de votre ressort.

Lorsque j'ai un tableau de chars char[80][25] J'aimerais peut-être l'imprimer sur la console en la faisant pivoter de manière à obtenir 25 lignes de 80 caractères qui tiennent sur l'écran sans défilement.

Je vais essayer de fournir des exemple où la représentation d'un tableau 2D en lignes et colonnes n'a aucun sens : Disons que j'ai besoin d'un tableau de 1 000 000 000 d'entiers. Ma machine a 8 Go de RAM, donc j'ai assez de mémoire pour cela, mais si vous essayez d'exécuter var a = new int[1000000000] vous obtiendrez très probablement l'exception OutOfMemory. Cela est dû à la fragmentation de la mémoire - il n'y a pas de bloc de mémoire consécutif de cette taille. À la place, vous pouvez créer un tableau 2D 10 000 x 100 000 avec vos valeurs. Logiquement, il s'agit d'un tableau 1D, que vous aimeriez dessiner et imaginer comme une seule séquence de valeurs, mais en raison de la mise en œuvre technique, il est en 2D.

2voto

Eng.Fouad Points 44085

En Java, il n'existe pas de tableaux multidimensionnels. Il y a des tableaux de tableaux. Donc :

int[][] array = new int[2][3];

Il s'agit en fait de deux tableaux, chacun comportant trois éléments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X