7
votes

Java Meilleure structure pour la matrice 2D d'entiers?

Quelle est la meilleure façon de stocker une matrice 2D d'entiers en Java?

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.

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.


0 commentaires

4 Réponses :


14
votes

Commencez par un ArrayList > , puis dès que vous avez fini de lire le fichier, activez-la en un int [] [] pour la performance.


0 commentaires

5
votes

Comme vous l'avez deviné, il serait probablement préférable d'utiliser une arraylist de ArrayList 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.

Vous pouvez ajouter à la liste des deux dimensions ArrayList de la matrice comme: < / p> xxx


0 commentaires

0
votes

Comme d'autres personnes ont dit, la meilleure option est d'utiliser une liste > pour lire le fichier, mais je ne crois pas qu'il soit nécessaire de le convertir en un int [] [] Après avoir terminé la lecture. Interne arraylist utilise déjà des tableaux (d'où le nom), et le compilateur va probablement traduire list.get.get.get (i) .get (j) à simplement arr [i ] [J] , 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 () pour couper les listes après leur construction.

D'autre part, il est préférable d'écrire A [i] [J] puis a.get (i) .get (j) , 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. xxx


1 commentaires

En disant qu'il n'y a pas de pénalité de performance avec ArrayList 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 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.



3
votes

Voici un exemple simple qui crée et imprime une matrice 3x3 xxx


0 commentaires