删除ArrayList[Java]中的连续重复项

删除ArrayList[Java]中的连续重复项,java,arraylist,Java,Arraylist,我正在做一个简单的Java程序,需要删除字符串ArrayList中所有连续的重复项 我的字符串ArrayList如下所示: list = [a,b,c,c,d,a,b,c,d] for (int i = 0; i<list.size(); i++) { if (list.get(i).compareTo(list.get(i+1))==0) { positionToRemove.add(i); } } 我的目标是删除所

我正在做一个简单的Java程序,需要删除字符串ArrayList中所有连续的重复项

我的字符串ArrayList如下所示:

list = [a,b,c,c,d,a,b,c,d]
for (int i = 0; i<list.size(); i++) {

        if (list.get(i).compareTo(list.get(i+1))==0) {
            positionToRemove.add(i);
        }

    }
我的目标是删除所有(并且只删除!)连续的重复项,这样结果将是:[a,b,c,d,a,b,c,d]。如您所见,两个相邻的“c”中的一个已被删除

我试过这样的方法:

list = [a,b,c,c,d,a,b,c,d]
for (int i = 0; i<list.size(); i++) {

        if (list.get(i).compareTo(list.get(i+1))==0) {
            positionToRemove.add(i);
        }

    }

我很肯定有一个非常简单的方法来实现这一点,但我现在记不得了

for
循环的
的最后一次迭代中,
list.get(i+1)
超出了列表的界限,因此
IndexOutOfBoundsException
。在任何数组/数组列表中,可访问的最大索引总是
size/length-1

要解决这个问题,你需要稍微改变一下你的逻辑

for (int i = 1; i<list.size(); i++) {
    if (list.get(i-1).compareTo(list.get(i))==0) {
        positionToRemove.add(i);
    }
}

for(int i=1;i当您使用index+1或
i+1
访问
列表时,您在上一次迭代中超出了
列表的范围。您可以通过将
for
循环的条件设置为
i
来解决此问题

for (int i = 0; i < list.size() -1; i++) {  
        if (list.get(i).compareTo(list.get(i+1))==0) {
            positionToRemove.add(i);
        }
 }
for(inti=0;i
其中位置移动将在末尾包含 然后我将使用list.remove()删除的连续元素 (仍未完成)

不必存储每个位置,您可以从列表的末尾开始,直接删除当前元素(如果它与左邻域相同)。使用此方法,您不需要创建另一个包含要删除的对象索引的列表

List<String> list = new ArrayList<>(Arrays.asList("a","b","c","c","d","a","b","c","d"));
for(int i = list.size() - 1; i > 0; i--){
    if(list.get(i).compareTo(list.get(i-1)) == 0){
        list.remove(i);
    }
}
System.out.println(list);

无需存储需要删除的元素的索引。只需通过以下方式直接删除即可:

int size = list.size();
for (int i = size - 1; i >= 1; i--) {
    if (list.get(i).compareTo(list.get(i - 1)) == 0) {
        list.remove(i);
    }
}

它不应达到列表的长度。必须关闭大小为-1的遍历

for (int i = 0; i<list.size() - 1; i++) {
    if (list.get(i).compareTo(list.get(i+1))==0) {
        positionToRemove.add(i);
    }
}

for(inti=0;i您可以使用Java 7,使用迭代器来实现这一点

Iterator<Integer> iterator = collection.values().iterator();
Integer previousValue = null;

while(iterator.hasNext()) {
    Integer currentValue = iterator.next();
    if(currentValue.equals(previousValue)){
        iterator.remove();
    }
    previousValue = currentValue;
}
Iterator Iterator=collection.values().Iterator();
整数previousValue=null;
while(iterator.hasNext()){
整数currentValue=iterator.next();
if(currentValue.equals(previousValue)){
iterator.remove();
}
previousValue=当前值;
}

我经常遇到边界异常的问题,但这对我理解循环的工作原理非常有用。非常感谢!