关于从ArrayList中删除元素

时间:2014-07-21 10:50:26

标签: java list arraylist

我定义了两个Arraylists,如下所示。第一个ArrayList List-1填充了{0}的Integers,第二个ArrayList List_2填充了{{ArrayList中包含的前四个元素1}} List_1`。

我想要做的是,在使用第一个ArrayList List_2中包含的前四个元素填充第二个ArrayList List_1之后,我想要删除/在List_1中复制List_2中的前四个元素时将其删除。

但是当我运行下面发布的代码时,我发现尽管我在0-3中使用了List_1次迭代并且从{{{{}}中删除了元素,但不会从for-loop中删除前四个连续元素。 1}}在0,1,2和3位。

请让我知道我做错了什么。

JavaCode:

List_1

6 个答案:

答案 0 :(得分:2)

您要移除元素0,1,2,3 - 但每次从列表中移除另一个元素。

0,1,2,3,4,5,6,7,8,9

删除0:

1,2,3,4,5,6,7,8,9

删除1:

1,3,4,5,6,7,8,9

删除2:

1,3,5,6,7,8,9

执行您想要的操作从3到0而不是0到3循环或使用迭代器。

答案 1 :(得分:1)

你的问题在这里:

for (int i=0;  i<4; i++)
    list_12.remove(i);

如果您有列表[1, 2, 3, 4],例如,如果从[2,3,4]和然后 >那个列表(在索引1处)您将拥有[2,4]。所以将循环更改为:

for (int i=0;  i<4; i++)
    list_12.remove(0);

(另请注意,从ArrayList开头删除元素的成本很高,因为所有其他元素都需要移位。)

答案 2 :(得分:1)

在for-loop

中设置list_12.remove(0);

<强>即

private static void populateList(List<Integer> list_22, List<Integer> list_12) {
    // TODO Auto-generated method stub

    for (int i=0; i<4; i++)
        list_22.add(list_12.get(i));

    for (int i=0;  i<4; i++)
        list_12.remove(0); //Make it as 0
}

答案 3 :(得分:0)

从ArrayList中删除元素时,索引全部被推回一个。 索引从0 ... 9到0 ... 8到0 ... 7等等。

所以而不是

for (int i=0;  i<4; i++)
    list_12.remove(i);

在这个特定情况下可以起作用的是

for (int i=0;  i<4; i++)
    list_12.remove(0);




我倾向于使用的是

for (int i = 0; i < list_12.size(); i++)
{
    list_12.remove(i--);
}

假设还有其他代码,并且删除元素是有条件的。

如果您真的需要清除所有元素,可以使用clear()函数。

或者类似的东西,

while(list_12.size() > 0)
{
    list_12.remove(0);
}

要么有效。

答案 4 :(得分:0)

您可以使用

list_12.removeAll(list22);

从list12中删除list22

中包含的所有元素

答案 5 :(得分:0)

我建议你使用subList() method from List。此方法返回指定fromIndex(包含)和toIndex(不包括)之间列表的一部分。

然后你的程序看起来像这样

populateWithIntegers();
populateWithFirtsFourElements();
removeFirstFourElements();

private void populateWithIntegers() {
    for (int i = 0; i < 10; i++) {
        list_1.add(i);
        System.out.println("list_1 contains: " + list_1.get(i));
    }
}

private void populateWithFirtsFourElements() {
    list_2 = list_1.subList(0, 4);
}

private void removeFirstFourElements() {
    list_1 = list_1.subList(4, list_1.size());
}

结果是:

List 1: [4, 5, 6, 7, 8, 9]
List 2: [0, 1, 2, 3]