我定义了两个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
答案 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]