ArrayList去除重复的字符串
程序员文章站
2022-03-21 17:04:38
...
需求:ArrayList去除集合中字符串的重复值
要求:不能创建新的集合。
需要细分为两种情况
第一种,没有连续重复
代码
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList array=new ArrayList();
array.add("hello");
array.add("world");
array.add("!");
array.add("I");
array.add("Love");
array.add("You");
array.add("hello");
array.add("world ");
array.add("!!!");
//遍历集合
for(int i=0;i<array.size();i++) {
for(int j=i+1;j<array.size();j++) {
if(array.get(i).equals(array.get(j))) {
array.remove(j);
}
}
}
System.out.println(array);
}
}
说明:采用选择排序的思想遍历集合array
第二种,有连续重复
如果依旧按照上面的循环,对集合进行遍历可能就会出现问题
如图所示:
当i指针只想集合中的第一个world元素,j指针指向第二个world元素时,删除j指向的world元素,集合中后面的元素全部往前移动一位,然后j指向集合中的下一个元素,如下图所示:
可以看到本来在位置3的world移动到了位置2,而指针j此时指向的位置3,world去重复就出现了问题。解决方法也很简单:
for(int i=0;i<array.size();i++) {
for(int j=i+1;j<array.size();j++) {
if(array.get(i).equals(array.get(j))) {
array.remove(j);
j--;//让指针留在当前位置
}
}
}
移除重复的元素后,让 指针j 继续留在当前位置,让刚刚从后面移动过来的元素值和 指针i 指向的元素值再次进行比较!
上一篇: 面试题刷题每日小结-2