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

如何向Map<String, Object[]>中的已有Object[]数组添加元素?

问题分析与修复方案

错误原因

  • 数组越界问题:Java数组的有效索引范围是0到length-1,当你尝试访问addedParams.length这个索引时,已经超出了数组的边界,必然抛出Attempt to access illegal array index异常。
  • 元素未追加反而被覆盖:原代码中addedParams[addedParams.length-1] = params的操作,是把新传入的params数组直接替换了原数组的最后一个元素,并没有将新参数的元素追加到数组中。每次调用都会覆盖之前的最后一个元素,导致最终数组里始终只有一组参数。

修复后的代码

public void addInMap(String str, Object... params) {        
    if(params != null && params.length > 0) {
        if(objMap.containsKey(str)) {
            Object[] originalParams = objMap.get(str);
            // 创建足够容纳原数组+新参数的新数组
            Object[] newParams = new Object[originalParams.length + params.length];
            // 复制原数组元素到新数组
            System.arraycopy(originalParams, 0, newParams, 0, originalParams.length);
            // 复制新参数元素到新数组的后半段
            System.arraycopy(params, 0, newParams, originalParams.length, params.length);
            // 更新map中的数组
            objMap.put(str, newParams);
        } else {
            objMap.put(str, params);
        }
    }
}

代码说明

  • 数组是固定长度的,无法直接扩容,所以必须创建新数组来容纳原数组和新参数的所有元素。
  • 使用System.arraycopy完成数组元素的复制,这是Java原生的高效数组复制方法,比手动循环复制性能更优。
  • 先复制原数组的所有元素到新数组的前半部分,再把新参数的所有元素复制到新数组的后半部分,实现了参数的追加效果,不会覆盖原有元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:14:55