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
相关产品推荐
相关产品推荐

