Java,如何调整二维数组的二维?

时间:2012-08-06 08:18:33

标签: java

在我的应用程序中,我需要一个二维数组。如果我定义它修复它工作正常,像这样:

static final String arrGroupelements[] = {"India", "Australia", "England", "South Africa"};
    static final String arrChildelements[][] = { {"Sachin Tendulkar", "Raina", "Dhoni", "Yuvi" },
                                                 {"Ponting", "Adam Gilchrist", "Michael Clarke"},
                                                 {"Andrew Strauss", "kevin Peterson", "Nasser Hussain"},
                                                 {"Graeme Smith", "AB de villiers", "Jacques Kallis"} };

但是,在我的代码中,我有两个列表。第一个是我可以得到它的食谱名称列表。

LinkedList<String> recipeList = dbShoppingHandler.getAllRecipeNames();
        String arrGroupelements[] = new String[recipeList.size()];
        for(int i=0; i<recipeList.size(); i++) {
            arrGroupelements[i] = recipeList.get(i);
        }

我的第二个清单是成分清单。为了获得我需要设置食谱名称的成分列表,然后我可以获得列表。但是,我不知道如何将此列表作为第二维度。我的代码是这样的:

String arrChildelements[][] = new String[recipeList.size()][20];
        for(int i=0; i<recipeList.size(); i++) {
            LinkedList<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
            for(int j=0; j<ingredient.size(); j++) {
                arrChildelements[i][j] = ingredient.get(j);
            }
        }

不好的是,我需要为第二维设置一个数字(在我的情况下为20)。如果我喜欢这个有5个项目的列表,我会有15个“”元素,而那些有超过20个项目的代码会忽略它们。

第一个维度是修复,但我需要根据成分的数量调整第二个维度。

任何建议表示赞赏。感谢。

3 个答案:

答案 0 :(得分:4)

如何以所需的尺寸分配数组:

String arrChildelements[][] = new String[recipeList.size()][];
//                     not mentioning second dimension size ^^
for(int i=0; i<recipeList.size(); i++) {
    LinkedList<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
    arrChildelements[i] = String[ingredient.size()];
//   assigning new array here ^^
    for(int j=0; j<ingredient.size(); j++) {
        arrChildelements[i][j] = ingredient.get(j);
    }
}

答案 1 :(得分:1)

我建议不要将2D数组用于动态结构。数组是不可变的,因此您必须复制它们,创建间隙并移动元素。标准Java库没有提供许多有用的方法来实现这一点。

相反,请使用列表列表:

List<List<String>> data = new ArrayList<List<String>>();

列表有许多有用的方法来追加元素,插入和删除它们,它们会让你的生活更轻松。

答案 2 :(得分:0)

最简单的方法是不要假设你事先知道长度。

String[][] arrChildelements[] = new String[recipeList.size()][];
for(int i=0; i<recipeList.size(); i++) {
    List<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
    arrChildelements[i] = ingredient.toArray(new String[0]);
}