Tableau de tableaux

Q: Comment utiliser un tableau de tableaux?

UNE:

String s = new String ("Hello, World"); // s est une référence String, qui fait référence à un // objet String avec la valeur «Hello, World». s = nouvelle chaîne ("Guten Tag, Welt"); // La même référence String se réfère désormais // à un objet String différent; autrement dit, // une seule référence a fait référence à deux // objets différents (consécutivement). // (Notez que nous avons maintenant un objet String // avec la valeur "Hello, World", qui n'a pas de // références; par conséquent, cet objet est éligible // pour être récupéré) String t; // t est une référence String avec une valeur nulle // (ne faisant référence à aucun objet). // Si vous essayez d'utiliser t à ce stade, par exemple en // disant int len ​​= t.length; vous obtiendrez une // NullPointerException (devrait être appelée // NullReferenceException). t = s;// La référence String t se réfère désormais au même // objet référencé par la référence String s, // à savoir un objet String avec la valeur "Guten Tag, Welt". // Nous avons donc ici deux // références à un seul objet (simultanément).

Les tableaux en Java sont des objets à part entière, qu'ils contiennent des primitives ( ints, chars, booleans, etc.) ou qu'ils contiennent d'autres objets. Cela signifie que les tableaux sont référencés comme n'importe quel autre objet, avec l'ajout de la []sémantique d'agrégation / déréférence. Voici un exemple:

String [] sa; // sa est une référence nulle // la tentative d'accès à sa.length provoque une exception NullPointerException. sa = nouvelle chaîne [2]; // sa n'est plus une référence null, il fait référence à un // objet spécifique qui est un tableau de deux références String nulles. // sa.length est maintenant égal à 2 // (sa [0] et sa [1] sont les deux références de chaîne nulles). sa [0] = "Bonjour le monde"; sa [1] = "Guten Tag, Welt"; // Désormais, sa fait référence à un tableau de deux références String non nulles. sa = nouvelle chaîne [1]; // sa.length est égal à 1 // La même référence sa fait désormais référence à un tableau // différent (et plus court). // sa [0] est une référence de chaîne nulle // la tentative d'accès à sa [1] provoque une // ArrayIndexOutOfBoundsException. sa [0] = "Bonjour le monde"; // sa [0] est désormais non nul.

Vous pouvez répondre à votre question sur les tableaux en considérant que

Chaîne [] [] saa; saa [0] [0] = "Aide";

provoquera un NullPointerException, car saaest une référence nulle - c'est-à-dire saaqu'elle ne fait référence à aucun objet. Pour attribuer une valeur au premier élément du premier tableau, saadoit faire référence à un tableau de avec une longueur supérieure à zéro et saa[0]doit faire référence à un tableau de chaînes non nul dont la longueur est également supérieure à zéro. Ainsi, on pourrait commencer par dire:

Chaîne [] [] saa; // saa est une référence nulle à un tableau de tableaux de chaînes // Tenter saa.length provoque déjà une NullPointerException, // comme le fait d'essayer saa [0]. saa = nouvelle chaîne [1] []; // saa fait maintenant référence à un tableau de 1 référence nulle à une chaîne []. // saa.length est égal à 1. // saa [0] est nul. saa [0] = nouvelle chaîne [2]; // saa fait maintenant référence à un tableau de 1 référence non nulle // à une chaîne [] de longueur 2. // saa.length est toujours égale à 1. // saa [0] .length est égale à 2 (mais saa [0] [0] et // saa [0] [1] sont tous deux nuls). saa [0] [0] = "Bonjour le monde"; saa [0] [1] = "Guten Tag, Welt"; // Désormais, saa [0] [0] et saa [0] [1] sont tous deux non nuls.

Notez que vous ne pouvez pas faire référence à saa[0][0]jusqu'à ce que ce saa[0]soit non nul, et vous ne pouvez pas rendre non saa[0]nul tant que vous n'avez pas rendu non saanul. Fondamentalement, vous devez créer votre tableau de tableaux de manière incrémentielle.

Il existe un raccourci facile à utiliser pour initialiser les références de tableau:

String [] [] saa = {{{"Hello, World}, {" Guten Tag, Welt "}}}; // cela crée un objet String [] [] comme celui créé // ci-dessus, et assigne saa à faire référence à cet objet. // L'espace blanc est destiné à souligner que // l'objet créé est un tableau d'une chaîne [] qui // contient deux chaînes. 

En utilisant ce raccourci, notre exemple pourrait correctement être écrit comme:

String [] [] saa = {{{"Aide"}}}; 

Cependant, cela fait saaréférence à un tableau de chaînes un par un. Notez que la syntaxe ci-dessus ne fonctionne que lors de l'initialisation d'une référence de tableau (l'initialisation est le cas particulier de l'affectation au moment de la déclaration). La manière plus générale de créer un nouveau tableau et de l'affecter à une référence de tableau nouvelle ou existante ressemble à ceci (dans le cas d'une référence existante):

saa = new String [] [] {// notez le vide [] [] - le compilateur calcule la // taille (vide [] [] est requis). {{"Hello"}, {"World"}} // c'est saa [0], // notez la virgule séparant saa [0] et saa [1] {{"Guten Tag"}, {"Welt"} } // c'est saa [1]}; // maintenant saa.length = 2, et saa [0] et saa [1] ont également chacun une longueur 2
Random Walk Computing est la plus grande boutique de conseil Java / CORBA à New York, spécialisée dans les solutions pour l'entreprise financière. Reconnus pour leur expertise Java de pointe, les consultants de Random Walk publient et parlent de Java dans certains des forums les plus respectés au monde.

Cette histoire, "Array of arrays" a été initialement publiée par JavaWorld.