在我的应用程序中,我需要一个二维数组。如果我定义它修复它工作正常,像这样:
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个项目的代码会忽略它们。
第一个维度是修复,但我需要根据成分的数量调整第二个维度。
任何建议表示赞赏。感谢。
答案 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]);
}