java treemap 重复_Java TreeMap重复键

比较器始终需要返回一致的结果,并且在TreeMap中使用时,应与equals保持一致.

在这种情况下,您的比较器违反了第一个约束,因为它不一定给出一致的结果.

示例:如果例如otherMap地图

"a" -> "someString"

"b" -> "someString"

然后compare(“ a”,“ b”)和compare(“ b”,“ a”)都将返回-1.

请注意,如果您将实现更改为

if (s1.equals(s2)) {

return 0;

}

return otherMap.get(s1).compareTo(otherMap.get(s2));

您违反了其他与equals一致的条件,因为即使s1不等于s2,otherMap.get(s1).compareTo(otherMap.get(s2))可能返回0.

我在一个自我解答的后续问题here中对此进行了详细说明.

从评论:

Even if a comparator gives inconsistent results, shouldn’t the Java language still not allow duplicate keys?

不,当您插入密钥时,TreeMap将使用比较器搜索数据结构以查看密钥是否已存在.如果比较器给出的结果不一致,则TreeMap可能会在错误的位置查找并得出该键不存在的结论,从而导致不确定的行为.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值