我想制作一个二维ArrayList,列数已经指定,但不是行。例如,我想首先创建一个有26列和0或1列的表,然后在每个循环做其他事情之后,行数将随着该循环而增加。用指定列数但不是行初始化2D arrayList?
当我增加行数(ArrayList ArrayList的长度)时,我也希望所有26个数组也增加。它的语法是什么?
我该如何索引或将新项目添加到特定位置 - 例如array[2][3] = item
?
顺便说一句,这是一个DFSA表从NFSA表转换
我想制作一个二维ArrayList,列数已经指定,但不是行。例如,我想首先创建一个有26列和0或1列的表,然后在每个循环做其他事情之后,行数将随着该循环而增加。用指定列数但不是行初始化2D arrayList?
当我增加行数(ArrayList ArrayList的长度)时,我也希望所有26个数组也增加。它的语法是什么?
我该如何索引或将新项目添加到特定位置 - 例如array[2][3] = item
?
顺便说一句,这是一个DFSA表从NFSA表转换
你可以有一个列表的列表,实际上像这样:
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("");
}
}
}
上述算法应该允许您将项目添加到多列,而空字符串填充休息了。这应该允许你最终得到等长的行。此外,该映射将用于存储键值对,其中键是列号,并且该值将是您想要抛入的任何字符串。这将允许您一次填充表中的一行。
它不会完全是一个二维列表;这将是一个列表清单。你打算如何处理这种结构?语法并不难,但我很好奇,如果你正在寻找一个可以更优雅地表达的解决方案。 – Makoto
你应该考虑创建一个类来保存26列,并使用包含该类实例的列表。由于可读性问题,列表清单难以维护。 – happymeal
@Makoto即时编写一个字符串数据结构,表示为一个固定列数的表,并且行数将增加,我需要访问所有第一行以便为表上的行添加另一个长度。这是从NFSA转换而来的DFSA表格 – Casper