如何按升序排序HashMap

5

我有以下的键值对:

A56:A64=9, A65:A73=9, A2:A8=7, A49:A55=7, A20:A26=7, A9:A19=11, A43:A48=6, A27:A42=16

我希望将它们按升序排序。我尝试使用 TreeMap,但出现了这个错误:

{A20:A26=7, A27:A42=16, A2:A8=7, A43:A48=6, A49:A55=7, A56:A64=9, A65:A73=9, A9:A19=11}

A2:A8=7应该排在第一位,但是它却排在第三位。

请告诉我如何解决这个问题。


2
升序排列是指按什么?键、值? - user1907906
2
请展示你的代码。 - Jens
你可以使用带有比较器的Collections.sort方法。这样你就可以决定它如何进行比较。 - Adem
默认比较器按字典顺序对字符串进行排序。你需要的是所谓的“数字顺序”。如果你想为哈希映射实现自定义比较器,请查看我之前评论中的链接。 - default locale
我想按键升序排列。 - Umesh Kumar
1个回答

7

TreeMap对于String键默认使用字符串的字典序(这是String的自然排序),除非您在构造函数中提供自己的比较器。

使用字典序时,A2:A8排在A20:A26之后。

您的比较器可能需要将字符串键拆分为4个部分(例如,A20:A26将被拆分为A20A26),并分别比较每一对部分,对于整数部分使用整数比较。


1
我将键按“:”分割,然后取第一个参数并替换了“A”,这给了我一个数值,并且正常的TreeMap在那里起作用。谢谢。 - Umesh Kumar
@AutoMater 不用谢! - Eran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接