You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过传入String参数而非对象本身从ArrayList中移除指定ParkingSlot对象

实现方案说明

你不需要将完整的ParkingSlot对象转换为String进行匹配,只需要对比每个对象的spotID属性即可,有两种合规且易维护的实现方案可选,同时你现有代码的equals方法存在缺陷需要先修复。

现有问题修正

你当前ParkingSlot类的equals方法没有做类型校验,当传入非ParkingSlot类型的对象时会抛出ClassCastException,且没有同步重写hashCode方法,违反Java对象相等性规范,修正后的代码如下:

package assignment1;
import java.util.Objects;

public class ParkingSlot {
    private String spotID;

    public ParkingSlot(String spotID) {
        this.spotID = spotID;
    }

    public String getParkingSlot(){
        return spotID;
    }

    @Override
    public String toString() {
        return spotID ;
    }

    @Override
    public boolean equals(Object obj) {
        // 先判断引用相等、空值、类型是否匹配
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        ParkingSlot that = (ParkingSlot) obj;
        return Objects.equals(spotID, that.spotID);
    }

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

实现传String移除车位的两种方案

方案1:重载removeSlot方法,直接遍历匹配(推荐)

用Java 8+提供的removeIf方法可以一行代码实现,逻辑直观不依赖equals的实现:

public void removeSlot(String spotId) {
    // 遍历集合,移除ID匹配的车位
    slots.removeIf(slot -> slot.getParkingSlot().equals(spotId));
}

如果使用Java 8以下版本,用迭代器实现:

public void removeSlot(String spotId) {
    Iterator<ParkingSlot> iterator = slots.iterator();
    while (iterator.hasNext()) {
        ParkingSlot slot = iterator.next();
        if (slot.getParkingSlot().equals(spotId)) {
            iterator.remove();
            break; // 车位ID唯一的情况下,找到后可直接终止遍历
        }
    }
}

方案2:构造临时ParkingSlot对象调用原有remove方法

因为你已经重写了equals方法,只要spotID相等就会被判定为相同对象,因此可以直接构造临时对象传入remove:

public void removeSlot(String spotId) {
    slots.remove(new ParkingSlot(spotId));
}

该方案代码更简洁,但依赖equals方法的正确性,且如果ParkingSlot构造方法存在额外逻辑会产生不必要的开销,适合业务逻辑简单的场景。

内容的提问来源于stack exchange,提问作者Nishant0823

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:36:03