我无法意识到如何正确地循环删除所有重复的数组。 例如,我有一个下一个数组列表:
public static void main(String[] args) {
ArrayList<Integer> integers = new ArrayList<Integer>();
integers.add(0);
integers.add(0);
integers.add(0);
integers.add(1);
integers.add(0);
integers.add(0);
integers.add(1);
integers.add(1);
integers.add(1);
integers.add(0);
integers.add(1);
integers.add(0);
integers.add(0);
integers.add(0);
integers.add(0);
integers.add(1);
integers.add(1);
integers.add(0);
}
结果应该是:
{0,1,0,1,0,1,0,1,0}
我试图这样做:
for(int i = 0; i < integers.size(); i++){
for(int j = i + 1; j < integers.size(); j++){
if (integers.get(i) == integers.get(j)){
integers.remove(integers.get(i));
break;
}
}
}
但是当“i”没有增加时,我不希望每个“j”循环。
你能给个建议吗?
答案 0 :(得分:3)
您可以通过跟踪从列表中读取的最后一个值来执行此操作:
int last = integers.get(0);
for(int i = 1; i < integers.size(); i++) {
if (integers.get(i).equals(last)) {
integers.remove(i);
i--;
} else {
last = integers.get(i);
}
}
P.S。 integers.remove(integers.get(i));
无论如何都是错误的,因为它会从integers.get(i)
中删除第一次出现的List
,您应该删除当前的匹配项。因此,您应该按索引而不是按值删除。
答案 1 :(得分:2)
你可以在一个循环中完成
for (int i = 0 ; i < integers.size() - 1 ; ++i) {
if (integers[i].equals(integers[i + 1])) {
integers.remove(i + 1);
--i;
}
}
如果您有匹配项删除副本并减少迭代变量,remove
会移动ArrayList
左侧的元素。
答案 2 :(得分:1)
您可以使用迭代器:
Iterator<Integer> it = integers.iterator();
int last = it.next();
int current;
while( it.hasNext())
{
current = it.next();
if( current == last)
{
it.remove();
}
else
{
last = current;
}
}