java问题:删除按字母顺序排列的字符串数组列表中的重复项

ybzsozfc  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(337)

下面是我从arraylist(按字母顺序排序)中删除重复项的函数:

public static void removeDuplicate(ArrayList<String> array){
    for (int i = 0; i < array.size(); i++) {
        if (i + 1 < array.size()) {
            if (array.get(i).equalsIgnoreCase((array.get(i + 1)))) {
                array.remove(i + 1);
                i=0;
            }
        }
    }
}

但不知何故,仍然有一些重复,我已经寻找其他方法删除重复在一个arraylist和他们完全一样我。所以现在我绊倒真的很难。如果你能帮我找到解决问题的办法,我将不胜感激。顺便说一句,这里是一个例子,当我打印我的arraylist时,在它上面添加函数removeduplicate(array)后,它的输出是什么:
一种成年后获得的能力又一次与年龄相悖,阿尔贝几乎把所有人都疏远了

6uxekuva

6uxekuva1#

在遍历一个列表时修改它通常会被咬回去。
试试这个

public static List<String> removeDuplicate(ArrayList<String> array) {
  return array.stream().distinct().collect(Collectors.toList());
}
3lxsmp7m

3lxsmp7m2#

现有方法应使用从列表末尾开始的循环:

public static void removeDuplicate(ArrayList<String> array) {
    for (int i = array.size() - 1; i > 0; i--) {
        if (array.get(i).equalsIgnoreCase((array.get(i - 1)))) {
            array.remove(i);
        }
    }
}

如果输入列表部分排序,则 Set 可用于跟踪重复项:

public static void removeDuplicate(ArrayList<String> array) {    
    Set<String> set = new HashSet<>();

    for (int i = 0; i < array.size(); i++) {
        if (!set.add(array.get(i).toUpperCase())) {
            array.remove(i--); // important to decrement the index!
        }
    }
}

相关问题