0

我正在开发一个项目,该项目需要将 2 个或多个字符串放在 2D 数组的一个空间中。例如:从索引 i=0、j=0 开始,将 4、5、6 和 7 存储在该特定空间中。我在考虑使用多维数组,但问题是对于第二个数组,大小(长度)没有定义(在这种情况下我使用 List 或 ArrayList)。所以问题是是否有任何数组类/方法可以做到这一点,或者如果我要在二维字符串普通数组中使用 ArrayList,我将如何创建/添加/打印该 ArrayList 中的每个字符串

4

2 回答 2

2

在java中,实际上没有“多维数组”这样的东西,二维数组是数组的数组,更高维度的数组,数组数组的数组等。唯一限制数组大小相同的是你像这样初始化它们。因此,您可以string[][][]使用一种称为“锯齿状数组”的技术轻松地将所需的信息存储在 中。

您可以像创建任何其他数组一样创建基本数组,但您没有指定最后一个维度的大小:

int[][][] myArray = new int[5][5][];

然后,将数组添加到二维数组以存储数据:

myArray[0][0] = new int[4];
myArray[0][0][0] = 4;   
myArray[0][0][1] = 5;
myArray[0][0][2] = 6;
myArray[0][0][3] = 7;

然后,如果你想在 (0,1) 中存储 6 个元素,你可以说

myArray[0][1] = new int[6];
// set values

对于其他每个单元格,依此类推。您还可以像往常一样调整数组的大小:

myArray[2][3] = Arrays.copyOf(myArray[2][3],myArray[2][3].length + 1);

希望这可以帮助。

编辑

在评论中的讨论之后,我想出了以下解决方案:

class MyContainer
{
    private Map<int, Map<int, List<string>>> data; //initialize in constructor

    public void setDataAt(int x, int y, List<string> value)
    {
        if (!data.ContainsKey(x))
        {
            data[x] = new HashMap<Map<int, Map<int, string>>();
        }
        if (!data[x].ContainsKey(y))
        {
            data[x] = new HashMap<int, string>();
        }
        data[x][y] = value;
    }
}

重要的是检查每个级别以确保下面的数据结构存在,如果不存在则创建它。当然,类型可以更改,我使用它HashMap是因为我不知道数据点是否总是有序的——如果你想按索引添加,通常比尝试使用List<>.

于 2013-08-15T08:36:55.677 回答
1

在java中,二维数组是数组的数组。

String [][]a = new String [3][];

您可能会或可能不会在这里提到第二个索引,如果您的数组大小可能会有所不同,您可以将其留空。

a[0] ={"apple"};
a[1] ={"cat","dog","mouse"};
a[2] ={"hi","hello"};
于 2013-08-16T08:07:06.533 回答