Quelle est la meilleure façon de stocker une matrice 2D d'entiers en Java? P>
Cette matrice sera remplie à partir d'un fichier de données, qui peut avoir des dimensions différentes, donc l'initialisation de l'int m [] [] [] = neuf int [n] [m] de certaines taille ne fonctionne pas car nous ne connaissons pas la taille. de matrice et nous allons simplement itérer des lignes du fichier et extraire des entiers de chaque ligne (séparés par un espacement blanche à l'intérieur). Je suppose donc utiliser une arrayliste d'arraylist pour ajouter des entiers en tant qu'objets à la volée, mais je ne suis pas tout à fait sûr comment faire ça. P>
En outre, il est important de choisir la meilleure structure de stocker une telle matrice en termes de sine de performance Je vais itérer cette matrice et de faire des calculs. P>
4 Réponses :
Commencez par un ArrayList
int [] [] code> pour la performance. P>
Comme vous l'avez deviné, il serait probablement préférable d'utiliser une arraylist code> de Vous pouvez ajouter à la liste des deux dimensions ArrayList code> lorsque vous traitez le fichier. Si la performance sera un problème après le fait, il peut être prudent de la remettre à une matrice en deux dimensions après les mots postulés.
ArrayList code> de la matrice comme: < / p>
Comme d'autres personnes ont dit, la meilleure option est d'utiliser une liste D'autre part, il est préférable d'écrire
int [] [] code> Après avoir terminé la lecture. Interne
arraylist code> utilise déjà des tableaux (d'où le nom), et le compilateur va probablement traduire
list.get.get.get (i) .get (j) code> à simplement
arr [i ] [J] code>, il n'y a donc aucune pénalité de performance. Si vous êtes préoccupé par la performance de l'espace, vous pouvez utiliser
truTosize () code> pour couper les listes après leur construction.
A [i] [J] code> puis
a.get (i) .get (j) code>, donc c'est à vous de décider. Je vais écrire un peu de pseudo-pseudo-code, car je ne sais pas comment vous envisagez d'aller chercher des éléments du fichier. P>
En disant qu'il n'y a pas de pénalité de performance avec ArrayList code> VS Les matrices primitives sont fausses. ArrayListe interne utilise des matrices primitives, mais il y a des frais généraux supplémentaires que
arraylist code> ne sont-ils pas là avec des tableaux primitifs. Vous encourrez certainement des différences de performance, c'est juste une question de mesure si la diminution en vaut la peine.
Voici un exemple simple qui crée et imprime une matrice 3x3