web-dev-qa-db-fra.com

comment créer un tableau dynamique à deux dimensions en Java?

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?

32
Arivu2020

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.

36
polygenelubricants

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>();
16
TofuBeer

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
2
beetlej

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. 

1
Wonson

Pourquoi ne pas créer une classe personnalisée contenant un tableau et utiliser le tableau de votre classe personnalisée?.

1
KMån

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.

1
shahnoor rahman
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.
    }
 }
0
Ankit Jaiswal