如何在Java中创建ArrayList的ArrayList?

时间:2015-11-25 21:13:29

标签: java arraylist

在代码中,我想创建一些类似于可扩展矩阵的东西。因此它可以在每个方向上扩展。如;

Path[1] = a
Path[2] = a,b
Path[3] = a,b,c
Path[4] = a,.........
......
......

如何在代码中创建和使用它?

3 个答案:

答案 0 :(得分:0)

您可以创建一个Integer []的ArrayList的ArrayList:

ArrayList<ArrayList<Integer[]>> path = new ArrayList<>();

然后,获取数据(参考你的例子):

ArrayList<Integer[]> path1 = path.get(0);
Integer[] a = path1.get(0);
ArrayList<Integer[]> path2 = path.get(1);
Integer[] a2 = path1.get(0);
Integer[] b2 = path1.get(0);

或使用for-each:

for(ArrayList<Integer[]> list : path) {
        for(Integer[] values : list) {
            for(Integer value : values) {
                System.out.println(value);
            }
        }
    }

获取特定值:

int value = path.get(0).get(0)[0];

编辑值:

path.get(0).get(0)[0] = 12;

答案 1 :(得分:0)

所以你想创建一个数组列表的数组列表?是的,让我们看看我们如何创建一个字符串:

ArrayList<String> array = new ArrayList<> ();

所以你可以这样做来创建数组列表的数组列表:

ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>> ();

然后你可以像这样在矩阵中添加一行:

ArrayList<String> row1 = new ArrayList<> ();
row1.add ("stuff1");
row1.add ("stuff2");
row1.add ("stuff3");
row1.add ("stuff4");
row1.add ("stuff5");
list.add (row1);

你可以像这样访问它:

list.get(0).get(3)

你可以使用增强的for循环遍历它,如下所示:

for (ArrayList<String> oneList : list) {
    for (String s : oneList) {
    }
}

如果要展开它,只需获取相应的行,然后在该维度上调用add方法。

答案 2 :(得分:-1)

我建议您为此Matrix创建一个新类,或者使用现有的类(你是谷歌吗?)。这样,您可以根据需要定义访问方法,并使代码保持自包含,可重用和可测试。

public class MyMatrix<T> {
    private ArrayList<ArrayList<T>> data;

    public MyMatrix() {
        data = new ArrayList<ArrayList<>>();
    }

    // add methods like the ones below, depending on what you need:

    public void set(T t, int x, int y) {
        // exercises for the reader:
        // - check bounds (x and y > 0)
        // - check that row x exists, if not add rows
        // - check that column y exists, if not, add columns in target row
        // - if matrix needs to be flush (i.e., all lines need the same number of columns, extend all columns as needed
        data.get(x).set(y, t);
    }

    T get(int x, int y) {
         // todo: sanity check x and y
         return data.get(x).get(y);
    }
}