java - 如何在 Java 中删除和替换数组列表中的项目?

标签 java arraylist

我在java中有以下代码,

import java.util.ArrayList;
import java.util.Objects;

public class Cars {

    private static ArrayList<String> replaceDuplicates(ArrayList<String> aList) {

        for (int i = 0; i < aList.size(); i++) {
            for (int j = i + 1; j < aList.size(); j++) {
                if (Objects.equals(aList.get(i), aList.get(j))) {
                    aList.remove(i);
                    aList.add(i, "");
                    aList.remove(j);
                    aList.add(j, "");
                }
            }
        }

        return aList;
    }

    public static void main(String[] args) {

        ArrayList<String> cars = new ArrayList<>();

        cars.add("Ford");
        cars.add("Ford");
        cars.add("Hyundai");
        cars.add("Toyota");
        cars.add("Toyota");
        cars.add("Toyota");
        cars.add("Ford");
        cars.add("Honda");
        cars.add("GMC");

        System.out.println(cars);

        cars = replaceDuplicates(cars);

        System.out.println(cars);

    }

}

此代码的输出是 - [, , Hyundai, , , Toyota, Ford, Honda, GMC]

我想用 "" 替换数组列表中多次出现的汽车名称。出于某种原因,在我的代码中,如果汽车的名称在数组列表中出现三次,则第三次出现不会被 "" 替换。

我想要的输出应该是这样的 - [, , Hyundai, , , , , Honda, GMC]

我在这里做错了什么?

提前谢谢您!

最佳答案

首先:您可以使用 List.set 来简化此代码而不是插入和删除元素。

aList.remove(i);
aList.add(i, "");

只会变成

aList.set(i, "");

如果这两个条目重复,您将删除它们。这导致总是删除偶数个条目的行为。例如:

a  b  a  a  c  a  d  a
b  a  c  a  d  a         #first pair removed
b  c  d  a               #second pair removed

如果元素数量为奇数,则列表中始终保留一个元素。

显然您需要某种方法来记住要删除哪些元素。一个简单的方法是使用一个标志来记住是否遇到了元素的重复项:

for (int i = 0; i < aList.size(); i++) {
    //the flag
    boolean duplicate = false;        

    for (int j = i + 1; j < aList.size(); j++) {
        if (Objects.equals(aList.get(i), aList.get(j))) {
            aList.set(j, "");   //remove all duplicates with an index higher than i
            duplicate = true;   //remember that element at index i is a duplicate
        }
    }

    //remove last duplicate element
    if(duplicate)
        aList.set(i, "");
}

关于java - 如何在 Java 中删除和替换数组列表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984805/

相关文章:

java - FileReader 无法读取文件

java - 实现具有两个不同方法签名和主体的接口(interface)

java - 最小/最大井字游戏

java - 在 list 中设置的 Android 自定义应用程序类不适用于 ClassCastException

java - 从Java中的多维数组中删除项目

Java ArrayList<String> 如何按索引排序/排序?

java - 从排序对象数组到 ArrayList<Object>

java - 在 GUI 中列出 ArrayList 中的对象并在多个 ArrayList 之间交替

java - 如何打印元音、数字等列表?

java - 如何在 Android Wifi 中列出相同的 SSID?