TreeMap在自定义排序时的坑
这段时间在公司开发一个官网的咨询内容锚文本需求,按需求来看,需要优先匹配长词,如:后台同时设置了“小学数学”及“小学数学补习”那么,优先匹配“小学数学补习”。
原本这里我打算使用TreeMap来存储数据,以便后面文本替换以自定义顺序遍历键。
可在敲完代码后,发现部分我存储的key,并没有成功存储到TreeMap。
如图:
排查问题第一步:
首先发现如图所标识的问题。我个人认为是不是因为设置了自定义排序而引起的问题,于是将自定义排序方式去掉后,存入的数据正常,没有缺少数据的情况。
排查问题第二步:
既然是加了自定义排序所引发的问题,那就查看一下TreeMap在存储数据时的过程是怎样的吧
(图片看起略小的话,建议右键以新标签页打开)
这才解释清楚为啥一开始所遇到的问题:
1.数据缺失
2.部分key-value不匹配。
所以解决方式为:
在设置TreeMap的自定义排序时,必须设置先后两个值存在算法相同的情况的判断,且返回必须大于0或小于0,绝对不能有等于0的情况出现,否则key-value不匹配,会出大乱子!!!