我想创建一个2D ArrayList,其中已经指定了列数但不是行。 例如,我想先创建一个包含26列和0或1列的表,然后在执行其他操作的每个循环之后,行数将随该循环一起增加。
当我增加行数(ArrayLists的ArrayList的长度)时,我也希望所有26个数组都增加。它的语法是什么?
我如何索引或添加新项目到特定位置 - 比如说array[2][3] = item
?
BTW这是从NFSA表转换的DFSA表
答案 0 :(得分:2)
你可以有一个列表列表,基本上是这样的:
List<List<String>> table = new ArrayList<List<String>>();
然后添加26列:
for(int i = 0; i < 26; i++)
{
table.add(new ArrayList<String>());
}
然后你可以有一个名为addToColumn(int column, String value, List<List<String>> table)
的方法,你可以这样做:
for(int i = 0; i < table.size(); i++)
{
if(i == column)
{
table.get(i).add(value);
}
else
{
table.get(i).add("");
}
}
这应该允许您拥有一起成长的列表。当然,我在上面的假设是你将一次输入一个元素。
或者,您可以这样做:
public void addToColumns(Map<int, String> data, List<List<String>> table)
{
for(int key : data.keyset())
{
table.get(key).add(data.get(key));
}
for(int i = 0; i < table.size(); i++)
{
if(!data.containsKey(i))
{
table.get(i).add("");
}
}
}
上述算法应该允许您将项添加到多个列,同时用空字符串填充其余部分。这应该允许您最终获得相等长度的行。此外,映射将用于存储键值对,其中键是列号,值将是您想要在其中输入的任何字符串。这样您就可以一次填充一行表。
答案 1 :(得分:-1)
您只需提供行数即可创建数组:
int[][] array = new int[4][];
现在您可以将数组视为已定义的转置,如果要在第2行的第3列输入元素,则可以输入为转置,即
array[3][2]=5;