删除阵列中一个接一个的重复项



我不知道如何正确循环删除数组中所有重复项。 例如,我有一个下一个数组列表:

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

你能给一个建议吗?

您可以通过跟踪从列表中读取的最后一个值来使用单个循环执行此操作:

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);
}
}

附言 无论如何,integers.remove(integers.get(i));都是错误的,因为它从List中删除了integers.get(i)的第一次出现,您应该删除当前出现的。因此,您应该按索引而不是按值删除。

您可以在单个循环中完成此操作

for (int i = 0 ; i < integers.size() - 1 ; ++i) {
if (integers[i].equals(integers[i + 1])) {
integers.remove(i + 1);
--i;
}
}

如果您有匹配项,请删除重复项并减少迭代变量,因为removeArrayList中的元素向左移动。

您可以使用迭代器:

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;
}
}

最新更新