我有类似下面的内容:
ArrayList<Integer>[] aL = new ArrayList[25];
for (int i = 0; i < aL.length; i++) {
aL[i] = new ArrayList<Integer>();
}
经过一些逻辑后,我遇到了如下结构:
aL[0] = {492,19,183,193};
aL[1] = {13};
aL[2] = {19,56};
aL[3] = {};
aL[4] = {1};
...
我想将aL
连接到一个新的连续数组中。上述示例的最终结果为newArray = {492,19,183,193,13,19,56,1,...}
。需要注意的是,我确切地知道应该有多少整数。我尝试过以下方法:
newArray = new int[100]; //recall the number of ints is defined, ex. 100
int a = 0;
for (int i = 0; i < aL.length; i++) {
for (int k = 0; k < aL[i].size(); k++) {
newArray[a] = aL[i].remove(0);
a++;
}
}
打印阵列时,缺少一些值。我要检查嵌套循环迭代的次数,有时当aL[i].size()
为5
时,它可能只迭代4
次。
答案 0 :(得分:1)
如果必须在迭代它们时从ArrayLists中删除元素,则应使用while循环:
while (aL[i].size() > 0) {
newArray[a] = aL[i].remove(0);
a++;
}
然而,正如Smutja评论的那样,最好迭代ArrayLists而不修改它们。
newArray = new int[100]; //recall the number of ints is defined, ex. 100
int a = 0;
for (int i = 0; i < aL.length; i++) {
for (int value : aL[i]) {
newArray[a] = value;
a++;
}
}
答案 1 :(得分:1)
k == 0
让我们看看这里发生了什么!
您从一个包含5个元素的列表开始:
- aL[i].size() == 5
和for
0&lt; 5所以进入k == 1
循环,删除列表的第一个元素并增加k
- aL[i].size() == 4
和k == 2
1&lt; 4,相同
- aL[i].size() == 3
和k == 3
2&lt; 3,相同
- aL[i].size() == 2
和for( int k = 0; k < aL[i].size() ; k++ ) {
newArray[a++] = aL[i].get(k);
}
aL[i].clear()
3&lt; 2是假的,所以你停止
如您所见,列表中只删除了3个元素:)
有很多解决方案,例如:
{{1}}