You need to enable JavaScript to run this app. Java中如何在ArrayList内检索指定编号项目并修改截止日期
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何在ArrayList内检索指定编号项目并修改截止日期

项目截止日期修改功能的正确实现方案

基础结构约定

该功能的实现完全依托现有两个类的设计,首先要保证基础结构满足修改要求:

  • NewProject实体类:所有私有属性必须配套对应的公开访问方法,核心需要包含项目编号getProjNum()、项目截止日期getDeadline()、setDeadline()三个方法,禁止把类内属性直接设为public暴露。
  • ProjectOptions容器类:内部维护的ArrayList<NewProject>集合是所有项目实例的唯一存储入口,不对外直接返回集合的引用,避免外部绕过类逻辑直接修改集合内容。

核心实现流程

完整的修改逻辑按照以下步骤落地即可正常运行:

  1. 接收用户输入的待修改项目编号,先做入参非空校验,排除空值、空字符串的非法输入
  2. 遍历容器内维护的项目集合,匹配和输入项目编号内容完全一致的项目实例
  3. 根据检索结果做分支处理:
    • 未匹配到目标项目:直接向用户返回“对应编号的项目不存在”的提示,终止流程
    • 匹配到目标项目:先展示当前项目的原截止日期,再接收用户输入的新截止日期值,校验日期格式、逻辑合法性(比如不能设为早于当前日期的过去时间)
  4. 校验通过的新截止日期值,直接调用已匹配到的项目实例的setDeadline()方法完成属性修改,修改完成后回读属性值做二次校验,确认修改生效后向用户反馈结果。

容易导致功能失效的常见缺陷

  • 字符串匹配错误:检索项目时,用==运算符比较两个字符串类型的项目编号,因为Java中字符串==比较的是对象内存地址而非实际存储的内容,会出现明明编号相同却匹配失败的问题,正确的比较方式是用inputProjNum.equals(project.getProjNum())做内容比对。
  • 修改对象错误:检索到匹配项后,没有直接操作集合中存储的原项目实例,而是重新new了一个新的NewProject对象去修改截止日期,新对象的属性改动完全不会同步到原集合中,自然无法实现修改效果。
  • 封装不满足要求:NewProject类的截止日期属性是私有访问权限,却没有对外提供对应的setter方法,外部代码拿到项目实例后根本无法对属性赋值。
  • 非法值无拦截:接收到用户输入的新截止日期后,没有做格式校验,直接把字符串值塞进属性里,后续读取数据时会出现类型不匹配、解析报错的问题。

核心方法代码参考

// ProjectOptions类内部封装的修改方法
private List<NewProject> projectList = new ArrayList<>();

public boolean updateDeadlineByProjNum(String inputProjNum, String newDeadline) {
    // 入参合法性校验
    if (inputProjNum == null || inputProjNum.isBlank() || newDeadline == null || newDeadline.isBlank()) {
        return false;
    }
    // 遍历检索匹配项目
    for (NewProject project : projectList) {
        if (inputProjNum.equals(project.getProjNum())) {
            try {
                // 解析校验日期格式
                LocalDate parsedDeadline = LocalDate.parse(newDeadline, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                // 直接修改集合中原实例的属性
                project.setDeadline(parsedDeadline);
                return true;
            } catch (DateTimeParseException e) {
                // 日期格式不合法直接返回失败
                return false;
            }
        }
    }
    // 遍历完成未找到匹配项目
    return false;
}

性能优化提示:如果后续项目存储规模较大、项目编号全局唯一,可以将ArrayList结构替换为HashMap<String, NewProject>,以项目编号为key存储实例,能把检索的时间复杂度从O(n)降到O(1),大幅提升查询速度。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 19:57:03