欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

第二种,有连续重复

如果依旧按照上面的循环,对集合进行遍历可能就会出现问题
如图所示:
ArrayList去除重复的字符串
当i指针只想集合中的第一个world元素,j指针指向第二个world元素时,删除j指向的world元素,集合中后面的元素全部往前移动一位,然后j指向集合中的下一个元素,如下图所示:

ArrayList去除重复的字符串

可以看到本来在位置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 指向的元素值再次进行比较!

相关标签: arraylist