如何通过在不创建原始列表副本的情况下同时删除两项中的一项来浏览Java列表。我尝试使用此代码,但最后得到一个空列表。有人有主意吗?
**package test;
import java.util.ArrayList;
//import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class suppressionUnElementSurDeuxSansCopie {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
supprimeElement(list);
System.out.println(list);
}
public static void supprimeElement(List<Integer> list) {
Iterator<Integer> i = list.iterator();
while(i.hasNext()) {
Integer e = i.next();
if (list.indexOf(e)%2 ==0) {
i.remove();
}
//list.removeIf(n -> (list.indexOf(e)%2==0));
}
}
}**
使用迭代器是正确的想法。问题是您然后使用迭代器中的值来引用已修改的列表,从而导致错误的行为。
一种方法可能是保留一个boolean
指示元素是否均匀的指示符,并在进行操作时翻转它:
public static void supprimeElement(List<Integer> list) {
boolean isEven = true;
Iterator<Integer> i = list.iterator();
while(i.hasNext()) {
i.next();
if (isEven) {
i.remove();
}
isEven = !isEven;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句