map的键值排序问题

本文介绍了一个Java开发过程中遇到的问题:如何在使用FastJSON时保证对象内HashMap字段按键值升序排序。通过将HashMap替换为TreeMap并自定义Comparator实现了需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间需要用java开发一个公司系统服务的SDK,其中碰到了一个很恶心的问题,在此小记。

需求

我需要将一个对象转成成json字符串,并要求每个字段都是按照字段名升序排序。

已知

fastjson将对象转换成json的时候会将object A 的字段按照名称升序排序。

问题

object A中有个属性是一个对象 B,这个内置对象 B有一个属性是HashMap类型。
1. 我将这个A的json字符串装成object,得到object A
2. 填充object中的部分字段;
3. 将object A转成有序json
至此,问题出现:b对象中的hashMap的顺序为json串中的排列顺序。

一般来说,hashMap会对键值的排序是按照key的哈希值进行排序的。这里本人存在一个误区:认为键值的哈希值的大小顺序和键值的大小顺序是一样的。其实哈希值是的大小无法通过被哈希的值的大小来估计。

解决方法

将hashMap换成TreeMap,并实现自己的Comparator来对键值进行升序排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值