我正在编写一个方法来删除Integer的ArrayList中相邻的重复值。
public static void remove2InARow(ArrayList<Integer> list) {
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i) == list.get(i+1)) {
list.remove(i);
}
}
}
如果将[3,4,3,3]
作为参数传入,则输出将为[3,4,3]
。
当相同的值重复超过2次时,这种实现就成了问题。例如,当[1, 2, 5, 4, 6, 6, 6, 1, 2]
应该是[1, 2, 5, 4, 6, 1, 2]
时,它变成了[1, 2, 5, 4, 6, 6, 1, 2]
。类似地,[n, ..., n]
应该变成[n]
。
有没有一种方法可以将我的实现调整为递归的?它甚至需要是递归的吗?
它当然不需要递归!
问题的根源是,在迭代时从集合中删除元素可能会导致一些意外行为,在迭代过程中尽量不要触摸列表,然后一旦完成,就删除需要的元素。
import java.util.stream.Collectors;
public static void remove2InARow(ArrayList<Integer> list) {;
list= list.stream().distinct().collect(Collectors.toList());
System.out.println(list);
}
也许它会帮助你!
public static void remove2InARow(ArrayList<Integer> list) {
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i) == list.get(i+1)) {
list.remove(i);
i--;
}
}
}
这对我有效。