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中的元素向左移动。是的,这是我的错误是的,这是我的错误