簡體   English   中英

如何在java中創建動態二維數組?

[英]how to create dynamic two dimensional array in java?

我想動態創建一個二維數組。

我知道列數。 但是行數正在動態更改。 我嘗試了數組列表,但它僅將值存儲在一維中。 我能做什么?

由於列數是一個常數,您可以只擁有一個int[] List

    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[] ,它是靜態的,但是您說列數是固定的,所以這不是問題。

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

二維字符串數組的另一個示例:

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

嘗試制作Treemap < Integer, Treemap<Integer, obj> >

在java中,Treemap是排序圖。 並且行和列中的項目數不會破壞您要設置的 2D 索引。 然后你可以得到一個類似結構的列行表。

如何制作包含數組的自定義類,並使用自定義類的數組。

這是一個簡單的例子。 此方法將返回一個二維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;

    }

說你想要一個二維字符串數組,然后調用這個函數作為

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

這將為您提供一個 3 行 3 列的二維 String 數組; 請注意,在Class<tType> c -> c中不能是原始類型,例如intchardouble 它必須是非原始的,如StringDoubleInteger等。

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.
    }
 }
List<Integer>[] array;  
array = new List<Integer>[10]; 

這是@TofuBeer 答案中的第二種情況是不正確的。 因為不能用泛型創建數組 你可以使用:

List<List<Integer>> array = new ArrayList<>();

很簡單,你想初始化一個二維數組並分配一個數組的大小,那么一個例子是

   public static void main(String args[])
   { 
    char arr[][];   //arr is 2d array name
    arr = new char[3][3]; 
    }


   //this is a way to inialize a 2d array in java....  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM