TreeMap在自定义排序时的坑

这段时间在公司开发一个官网的咨询内容锚文本需求,按需求来看,需要优先匹配长词,如:后台同时设置了“小学数学”及“小学数学补习”那么,优先匹配“小学数学补习”。

原本这里我打算使用TreeMap来存储数据,以便后面文本替换以自定义顺序遍历键。

可在敲完代码后,发现部分我存储的key,并没有成功存储到TreeMap。

如图:

 

排查问题第一步:

  首先发现如图所标识的问题。我个人认为是不是因为设置了自定义排序而引起的问题,于是将自定义排序方式去掉后,存入的数据正常,没有缺少数据的情况。

 

 

排查问题第二步

既然是加了自定义排序所引发的问题,那就查看一下TreeMap在存储数据时的过程是怎样的吧

 (图片看起略小的话,建议右键以新标签页打开)

 

 这才解释清楚为啥一开始所遇到的问题:

1.数据缺失

2.部分key-value不匹配。

所以解决方式为:

在设置TreeMap的自定义排序时,必须设置先后两个值存在算法相同的情况的判断,且返回必须大于0或小于0,绝对不能有等于0的情况出现,否则key-value不匹配,会出大乱子!!!

 

 

 

posted @ 2020-02-10 16:37  惊叫唤  阅读(1099)  评论(0编辑  收藏  举报