删除ArrayList[Java]中的连续重复项
我正在做一个简单的Java程序,需要删除字符串ArrayList中所有连续的重复项 我的字符串ArrayList如下所示:删除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); } } 我的目标是删除所
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=当前值;
}
我经常遇到边界异常的问题,但这对我理解循环的工作原理非常有用。非常感谢!