Je veux créer un tableau à deux dimensions dynamiquement.
Je connais le nombre de colonnes. Mais le nombre de lignes est modifié dynamiquement. J'ai essayé la liste de tableaux, mais elle stocke la valeur dans une seule dimension. Que puis-je faire?
Le nombre de colonnes étant une constante, vous pouvez simplement avoir une List
de int[]
.
import Java.util.*;
//...
List<int[]> rowList = new ArrayList<int[]>();
rowList.add(new int[] { 1, 2, 3 });
rowList.add(new int[] { 4, 5, 6 });
rowList.add(new int[] { 7, 8 });
for (int[] row : rowList) {
System.out.println("Row = " + Arrays.toString(row));
} // prints:
// Row = [1, 2, 3]
// Row = [4, 5, 6]
// Row = [7, 8]
System.out.println(rowList.get(1)[1]); // prints "5"
Etant donné qu'il est soutenu par une List
, le nombre de lignes peut augmenter et diminuer de manière dynamique. Chaque ligne est soutenue par un int[]
, qui est statique, mais vous avez dit que le nombre de colonnes est fixe, donc ce n'est pas un problème.
Il n’existe pas de tableaux multidimensionnels en Java, il existe cependant des tableaux de tableaux.
Il vous suffit de créer un tableau aussi large que vous le souhaitez, puis pour chaque élément, créez un autre tableau aussi grand que vous le souhaitez.
int array[][];
array = new int[10][];
array[0] = new int[9];
array[1] = new int[8];
array[2] = new int[7];
array[3] = new int[6];
array[4] = new int[5];
array[5] = new int[4];
array[6] = new int[3];
array[7] = new int[2];
array[8] = new int[1];
array[9] = new int[0];
Alternativement:
List<Integer>[] array;
array = new List<Integer>[10];
// of you can do "new ArrayList<Integer>(the desired size);" for all of the following
array[0] = new ArrayList<Integer>();
array[1] = new ArrayList<Integer>();
array[2] = new ArrayList<Integer>();
array[3] = new ArrayList<Integer>();
array[4] = new ArrayList<Integer>();
array[5] = new ArrayList<Integer>();
array[6] = new ArrayList<Integer>();
array[7] = new ArrayList<Integer>();
array[8] = new ArrayList<Integer>();
array[9] = new ArrayList<Integer>();
Un autre exemple pour un tableau de 2 dimensions:
public void arrayExam() {
List<String[]> A = new ArrayList<String[]>();
A.add(new String[] {"Jack","good"});
A.add(new String[] {"Mary","better"});
A.add(new String[] {"Kate","best"});
for (String[] row : A) {
Log.i(TAG,row[0] + "->" + row[1]);
}
}
Sortie:
17467 08-02 19:24:40.518 8456 8456 I MyExam : Jack->good
17468 08-02 19:24:40.518 8456 8456 I MyExam : Mary->better
17469 08-02 19:24:40.518 8456 8456 I MyExam : Kate->best
Essayez de faire Treemap < Integer, Treemap<Integer, obj> >
En Java, Treemap est une carte triée. Et le nombre d’éléments dans les rangées et les colonnes ne visionnera pas l’index 2D que vous voulez définir . Vous pouvez alors obtenir une table à colonnes comme la structure.
Pourquoi ne pas créer une classe personnalisée contenant un tableau et utiliser le tableau de votre classe personnalisée?.
Voici un exemple simple . Cette méthode renverra un tableau tType
à 2 dimensions
public tType[][] allocate(Class<tType> c,int row,int column){
tType [][] matrix = (tType[][]) Array.newInstance(c,row);
for (int i = 0; i < column; i++) {
matrix[i] = (tType[]) Array.newInstance(c,column);
}
return matrix;
}
vous voulez un tableau en 2 dimensions, puis appelez cette fonction comme
String [][] stringArray = allocate(String.class,3,3);
Cela vous donnera un tableau de chaîne à deux dimensions avec 3 lignes et 3 colonnes; Notez que dans Class<tType> c
-> c
ne peut pas être un type primitif comme dirons, int
ou char
ou double
Ce doit être non-primitif comme, String
ou Double
ou Integer
et ainsi de suite.
Scanner sc=new Scanner(System.in) ;
int p[][] = new int[n][] ;
for(int i=0 ; i<n ; i++)
{
int m = sc.nextInt() ; //Taking input from user in Java.
p[i]=new int[m] ; //Allocating memory block of 'm' int size block.
for(int j=0 ; j<m ; j++)
{
p[i][j]=sc.nextInt(); //Initializing 2D array block.
}
}