【发布时间】:2011-02-12 00:52:09
【问题描述】:
我想动态创建一个二维数组。
我知道列数。但是行数正在动态更改。我尝试了数组列表,但它仅将值存储在一维中。我能做什么?
【问题讨论】:
-
您尝试过列表列表吗?像 List
- >
标签: java multidimensional-array
我想动态创建一个二维数组。
我知道列数。但是行数正在动态更改。我尝试了数组列表,但它仅将值存储在一维中。我能做什么?
【问题讨论】:
标签: java multidimensional-array
由于列数是一个常数,您可以只拥有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[],这是静态的,但是你说列数是固定的,所以这不是问题。
【讨论】:
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 是有序映射。并且行和列中的项目数不会影响您要设置的二维索引。 然后你可以得到一个类似结构的列表。
【讨论】:
这是一个简单的例子。
这个方法会返回一个二维的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 列的二维字符串数组;
请注意,Class<tType> c -> c 不能是原始类型,例如 int 或 char 或 double。它必须是非原始的,例如 String 或 Double 或 Integer 等等。
【讨论】:
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....
【讨论】: