Подтвердить что ты не робот

Как создать динамический двухмерный массив в java?

Я хочу создать двумерный массив динамически.

Я знаю количество столбцов. Но число строк меняется динамически. Я попробовал список массивов, но он сохраняет значение только в одном измерении. Что я могу сделать?

4b9b3361

Ответ 1

Поскольку число столбцов является константой, вы можете просто иметь List из 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"

Так как он поддерживается List, количество строк может увеличиваться и сжиматься динамически. Каждая строка поддерживается int[], которая является статической, но вы сказали, что количество столбцов исправлено, поэтому это не проблема.

Ответ 2

В Java нет многомерных массивов, однако существуют массивы массивов.

Просто создайте массив, какой бы большой он ни был нужен, тогда для каждого элемента сделайте еще один массив, какой бы большой он ни был.

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];

В качестве альтернативы:

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

Ответ 3

Как создать собственный класс, содержащий массив, и использовать массив вашего пользовательского класса.

Ответ 4

Попробуйте сделать Treemap < Integer, Treemap<Integer, obj> >

В java Treemap сортируется карта. И количество элементов в строке и столбце не будет вставлять 2D-индекс, который вы хотите установить. Затем вы можете получить таблицу col-row, такую ​​как структура.

Ответ 5

Вот простой пример. этот метод вернет 2-мерный массив tType

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;

    }

скажите, что вам нужен 2-мерный массив String, затем вызовите эту функцию как

String [][] stringArray = allocate(String.class,3,3);

Это даст вам двухмерный массив String с тремя строками и тремя столбцами; Обратите внимание: в Class<tType> cc не может быть примитивного типа, например say, int или char или double. Он должен быть не примитивным, например, String или double или Integer и т.д.

Ответ 6

Еще один пример для 2-мерного массива String:

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]);
    }
}

Вывод:

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