将arraylists的arraylist转换为数组?

时间:2015-06-25 08:52:41

标签: java arrays arraylist

我有类似下面的内容:

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次。

2 个答案:

答案 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() == 5for
0&lt; 5所以进入k == 1循环,删除列表的第一个元素并增加k
- aL[i].size() == 4k == 2
1&lt; 4,相同
- aL[i].size() == 3k == 3
2&lt; 3,相同
- aL[i].size() == 2for( int k = 0; k < aL[i].size() ; k++ ) { newArray[a++] = aL[i].get(k); } aL[i].clear()
3&lt; 2是假的,所以你停止

如您所见,列表中只删除了3个元素:)

有很多解决方案,例如:

{{1}}