Java 移除阵列中一个接一个的重复项

Java 移除阵列中一个接一个的重复项,java,arraylist,Java,Arraylist,我不知道如何正确地循环删除数组中的所有副本。 例如,我有一个下一个数组列表: public static void main(String[] args) { ArrayList<Integer> integers = new ArrayList<Integer>(); integers.add(0); integers.add(0); integers.add(0); integers.ad

我不知道如何正确地循环删除数组中的所有副本。 例如,我有一个下一个数组列表:

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);
}
我试着做这个循环:

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;
                }
            }
        }
但我不想在没有增加的情况下循环每一个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);
    }
}

p.S.integers.removeinters.geti;无论如何都是错误的,因为它将从列表中删除integers.geti的第一个匹配项,并且您应该删除当前匹配项。因此,您应该按索引而不是按值进行删除。

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

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.removeinters.geti;无论如何都是错误的,因为它将从列表中删除integers.geti的第一个匹配项,并且您应该删除当前匹配项。因此,您应该按索引而不是按值进行删除。

您可以使用迭代器:

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

您可以使用迭代器:

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

你可以在一个循环中完成

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

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

您可以在单个循环中执行此操作

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

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

是的,这是我的错误是的,这是我的错误