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

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

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

  1. public static void removeDuplicate(ArrayList<String> array){
  2. for (int i = 0; i < array.size(); i++) {
  3. if (i + 1 < array.size()) {
  4. if (array.get(i).equalsIgnoreCase((array.get(i + 1)))) {
  5. array.remove(i + 1);
  6. i=0;
  7. }
  8. }
  9. }
  10. }

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

6uxekuva

6uxekuva1#

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

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

3lxsmp7m2#

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

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

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

  1. public static void removeDuplicate(ArrayList<String> array) {
  2. Set<String> set = new HashSet<>();
  3. for (int i = 0; i < array.size(); i++) {
  4. if (!set.add(array.get(i).toUpperCase())) {
  5. array.remove(i--); // important to decrement the index!
  6. }
  7. }
  8. }
展开查看全部

相关问题