如何在java中创建动态二维数组?

如何在java中创建动态二维数组?,java,multidimensional-array,Java,Multidimensional Array,我想动态创建一个二维数组 我知道列数。但是行数正在动态地改变。我尝试了数组列表,但它只存储一维值。我能做什么?制作一个包含数组的自定义类,并使用自定义类的数组如何。Java中没有多维数组,但是有数组数组 只需创建一个任意大的数组,然后为每个元素创建另一个任意大的数组 int array[][]; array = new int[10][]; array[0] = new int[9]; array[1] = new int[8]; array[2] = new int[7]; array[3

我想动态创建一个二维数组


我知道列数。但是行数正在动态地改变。我尝试了数组列表,但它只存储一维值。我能做什么?

制作一个包含数组的自定义类,并使用自定义类的数组如何。

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>();
List[]数组;
数组=新列表[10];
//当然,您可以为以下所有操作执行“新建ArrayList(所需大小);”
数组[0]=新的ArrayList();
数组[1]=新的ArrayList();
数组[2]=新的ArrayList();
数组[3]=新的ArrayList();
数组[4]=新的ArrayList();
数组[5]=新的ArrayList();
数组[6]=新的ArrayList();
数组[7]=新的ArrayList();
数组[8]=新的ArrayList();
数组[9]=新的ArrayList();

由于列的数量是一个常数,因此您只需拥有一个
列表
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"
import java.util.*;
//...
List rowList=new ArrayList();
添加(新的int[{1,2,3});
添加(新的int[{4,5,6});
添加(新的int[]{7,8});
对于(int[]行:行列表){
System.out.println(“Row=“+Arrays.toString(Row));
}//打印:
//行=[1,2,3]
//行=[4,5,6]
//行=[7,8]
System.out.println(rowList.get(1)[1]);//打印“5”

因为它有一个
列表
,所以行数可以动态地增长和收缩。每行后面都有一个
int[]
,它是静态的,但您说过列的数量是固定的,所以这不是问题。

尝试使
Treemap

在java中,树映射是排序映射。行和列中的项目数不会影响要设置的2D索引。 然后您可以得到一个类似col row表的结构

下面是一个简单的例子。 此方法将返回一个二维
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;

    }
这将为您提供一个包含3行3列的二维字符串数组;
请注意,在
类c
->
c
中,不能是诸如say、
int
char
double
之类的基本类型。它必须是非原语,例如,
String
Double
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]);
    }
}

很简单,您想初始化一个二维数组,然后指定数组的大小 例如

   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....  
Scanner sc=新扫描仪(System.in);
int p[][]=新的int[n][];
对于(int i=0;i
List[]数组;
数组=新列表[10];
@TofuBeer答案中的第二种情况是不正确的。因为无法使用泛型创建数组

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

你是否尝试了一个列表列表?比如说,Listar应该用什么来实现一个固定行但可变列的数组?什么是这个答案?如果我们想定义任何常数,我们可以简单地使用数组……java是否有C++的等价向量类,在那里你可以动态地添加行和列。(无需编写自己的..)?这是在Java中实现大型2D数组的一种很好的通用方法。但是,您必须使用Integer,因为原语不能是Treemap的键。此代码不适合我编译,我在“tType”上遇到编译错误。你能给出完整的代码吗?请加一点解释-一个简单的代码块并不是那么有用。应该接受,因为它显示了不使用arraylist和使用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....  
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]; 
List<List<Integer>> array = new ArrayList<>();