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

Java中如何实现带自定义键的动态可填充数据结构?

合适的动态数据结构选择

你用JSONObject不是最佳方案,它本质是为JSON序列化/反序列化设计的,用于日常内存中存储键值对会有额外的JSON格式处理开销,而且不符合Java集合的常规使用习惯。针对你的需求,更合适的是用Java标准集合类:

优先推荐:HashMap<Integer, Object>(或LinkedHashMap)

如果你的键是整数类型(就像示例里的23、14),直接用整数作为键比转成字符串更直观,代码示例:

// 普通HashMap,不保证顺序
HashMap<Integer, Object> customMap = new HashMap<>();
// 如果需要保留插入顺序,用LinkedHashMap:
// LinkedHashMap<Integer, Object> customMap = new LinkedHashMap<>();

customMap.put(23, 3632464346L); // 注意这里是长整型数值,要加L避免溢出
customMap.put(14, "abcdefgh");
customMap.put(22, "2352sdfs23");

取值的时候直接用整数键获取:

// 取值时注意类型转换
long numValue = (long) customMap.get(23);
String strValue = (String) customMap.get(14);

如果担心类型转换出错,可以先做类型判断:

Object value = customMap.get(23);
if (value instanceof Long) {
    long num = (Long) value;
    // 处理逻辑
}

备选:HashMap<String, Object>

如果你的键可能包含非数字内容,或者必须用字符串类型的键,就用这个:

HashMap<String, Object> customMap = new HashMap<>();
customMap.put("23", 3632464346L);
customMap.put("14", "abcdefgh");
customMap.put("22", "2352sdfs23");

为什么不选JSONObject?

  • 它的API设计围绕JSON操作,比如toString()会直接输出JSON格式字符串,日常存数据用不到这些额外功能
  • 性能比普通Map差,因为内部要处理JSON的格式规则
  • 类型处理不如Map直观,比如存数值时会自动转成JSON兼容的类型,可能带来不必要的类型转换问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:25:06