java - 在不知道索引的情况下从 ArrayList 中删除对象

标签 java

假设我有 10 辆汽车的 ArrayList,并且我想从列表中删除索引 6 处的汽车。如果我现有的代码是:

public class Main {

    public static void main(String[] args) {
        
        Car C1 = new Car();
        C1.addCar("audi", 5);
        C1.addCar("porsche", 3);

        C1.removeCar("audi"); // is not working
        
}

public class Car {

    private String name;
    private int age;

    private ArrayList<Car> cars;

    public Car() {
        this.cars = new ArrayList<>();
    }

    public Car(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void addCar(String name, int age) {
        this.cars.add(new Car(name, age));
    }

    public void removeCar(String name) {
        this.cars.remove(name);
    }

      public ArrayList<Car> getCars() {
        return cars;
    }
}

如何更改删除方法以便能够按名称从 ArrayList 中删除汽车?

最佳答案

使用Iterator迭代汽车如果汽车的名称与给定的 name 匹配(即作为参数传递给方法的 name),则使用迭代器变量删除汽车。

按如下方式进行:

public void removeCar(String name) {
    Iterator<Car> car = cars.iterator();
    while (car.hasNext()) {
        if (car.next().name.equals(name)) {
            car.remove();
        }
    }
}

另一个选项(我不推荐)是仅在 name 上覆盖 equalshashCode 方法,然后使用 List #contains如下图:

class Car {

    private String name;
    private int age;

    private ArrayList<Car> cars;

    public Car() {
        this.cars = new ArrayList<>();
    }

    public Car(String name) {
        this.name = name;
    }

    public Car(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void addCar(String name, int age) {
        this.cars.add(new Car(name, age));
    }

    public void removeCar(String name) {
        Car car = new Car(name);
        if (cars.contains(car)) {
            cars.remove(car);
        }
    }

    public ArrayList<Car> getCars() {
        return cars;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }

    @Override
    public boolean equals(Object obj) {
        Car other = (Car) obj;
        return Objects.equals(name, other.name);
    }
}

请注意,此方法还需要向承包商提供仅name 作为参数。

关于java - 在不知道索引的情况下从 ArrayList 中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62564141/

相关文章:

java - 该程序将创建多少个字符串对象

java - 具有 Java 多线程应用程序的 Singleton

java - Apache HttpClient ResponseHandler 异常

java - 使用spark-submit部署程序时出现java.lang.NoSuchMethodError

java - 将 Spring MVC 与 Twitter Bootstrap 一起使用

java - 将 Excel 工作表设置为只读

java - 如何获取 Google 云端硬盘上已更改文件的 ID

Java Swing JEditorPane 和屏幕阅读器

java - 有没有办法在 JavaFX LineChart 中断开串联的 2 个点?

java - 使用java从字符串中删除多余的空格和不可见的字符