Open lilanlong opened 1 month ago
为什么有这个需求?java.util.LinkedHashMap也不会提供下标获取值的接口
是的,LinkedHashMap的确没有提供,只是在工作开发过程中,有些SQL非常复杂,公司也没有定义实体来接收SQL查询返回的值,而是用JSONObject直接接收了,SQL中的别名也没有规律,反而通过下标取值更加方便,当然我们可以通过keySet来找到与下标的关系,但是性能上损耗的比较多。
你如果喜欢通过下标取值,为啥要用 Map
来接收呢 ?直接用 Object[]
数组就可以呀。
即使 LinkedHashMap
是有序的,但它的 底层实现 和 纯数组 完全是两码事。
即使你不想自己处理,担心性能损耗,但是技术实现是没有完全的黑魔法的,你这里不实现,就必定要别人那里去实现,底层也需要维护两套数据结构的元数据,才能同时支持两种取值方式。这样和你自己实现所产生的性能开销是没有什么差别的。
而且为了提供这个支持,就必须内置到 JSONObecjt
里面,哪怕别人没有你这个小众需求,也会因此受到负面的性能影响(因为 JSONObecjt
底层还是要维护两套数据结构元数据)。
是的,在我提这个建议之前,我也想过你说的这些问题,最后想想还是提一下吧,如果对fastjson有意义,就进行实现,没有意义忽略即可。
请描述您的需求或者改进建议
现在JSONObject是继承LinkedHashMap实现的,是有序的,我想通过下标来获取JSONObject中的值。
请描述你建议的实现方案
现在Map中的key是通过Set存储的,无法通过下标获取key,进而获得相应的值,我想在JSONObject类中增加ArrayList来维护Map的key,在增加或者删除值的时候,都来更新这个ArrayList,这样就很容易实现通过下标获取对应的值了,不知道是否可行。
描述您考虑过的替代方案
对您考虑过的任何替代解决方案或功能的描述。
附加信息
如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。