使用指定的列数而不是行初始化2D arrayList?

时间:2013-08-21 06:12:01

标签: java arraylist

我想创建一个2D ArrayList,其中已经指定了列数但不是行。 例如,我想先创建一个包含26列和0或1列的表,然后在执行其他操作的每个循环之后,行数将随该循环一起增加。

当我增加行数(ArrayLists的ArrayList的长度)时,我也希望所有26个数组都增加。它的语法是什么?

我如何索引或添加新项目到特定位置 - 比如说array[2][3] = item

BTW这是从NFSA表转换的DFSA表

2 个答案:

答案 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;