我想制作一个 2D ArrayList,其中已经指定了列数,但没有指定行数。例如,我想首先创建一个有 26 列和 0 或 1 列的表,然后在每个循环执行其他操作之后,行数将随着该循环而增加。
当我增加行数(ArrayList 的 ArrayList 的长度)时,我还希望所有 26 个数组也增加。它的语法是什么?
我将如何索引或将新项目添加到特定位置 - 比如array[2][3] = item
?
顺便说一句,这是从 NFSA 表转换而来的 DFSA 表
你可以有一个列表列表,基本上是这样的:
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("");
}
}
}
上述算法应该允许您将项目添加到多个列,同时用空字符串填充其余部分。这应该允许您以相同长度的行结束。此外,该映射将用于存储键值对,其中键是列号,值将是您想要放入其中的任何字符串。这将允许您一次填充一行。
您可以通过仅给出行数来简单地创建一个数组:
int[][] array = new int[4][];
现在您可以将您的数组视为您定义的内容的转置,因此如果您想在第 2 行的第 3 列输入一个元素,您可以输入为转置,即
array[3][2]=5;