今天主要简单讲一下如何扩展开源高效查询JAVA项目 concurrent-trees 中 使用基数树进行通配符查找。
基数树精确插入和查找
想要扩展其查询方法 , 首先要先理解其基本方法的实现从而才能更好的进行扩展。因此我选择了基数树的精确字符字符串查找作为参考。
首先将项目Clone到本地后,我们先去查看其单元测试类以及对应方法。
![](https://img.haomeiwen.com/i13837765/9f650b089dd7fb50.png)
然后再找到查找的核心方法进行debugger。只要足够细心和耐心就可以很快摸清其查找逻辑。
![](https://img.haomeiwen.com/i13837765/534ae618581062ae.png)
具体逻辑如图所示感兴趣的同学,可以自己通过运行单元测试类进行debugger。
结合上一篇文章的逻辑。我们先往基数树中插入三个字符串TEST,TEAM,TOAST 。 他们的数据结构如图所示
![](https://img.haomeiwen.com/i13837765/7367fda574a44abe.png)
当我们调用方法查找字符串TEST 时(getValueForExactKey("TEST")
) 具体查找逻辑如图
![](https://img.haomeiwen.com/i13837765/8f82ec96766296cc.png)
![](https://img.haomeiwen.com/i13837765/e8b743fbb74e9f9a.png)
![](https://img.haomeiwen.com/i13837765/2ba64bf7de907b8a.png)
了解到了 如何精确匹配,那么我们再来看如何插入到基数树中。
![](https://img.haomeiwen.com/i13837765/264a8e1b164cd575.png)
剩下的字符串插入的代码逻辑如上图数据结构演变一样 ,我就不过多赘述,感兴趣的同学可以研究一下源码。
基于基数树精确插入和查找扩展通配符查找
查找
熟悉了基数树的精确查找,那我们来扩展一下通配符的查找方法。
首先在源码中加入通配符查找方法签名:
![](https://img.haomeiwen.com/i13837765/633548c3526470d0.png)
然后我们进行通配符查找的具体方法实现:
![](https://img.haomeiwen.com/i13837765/bfac6f7cdb2e7405.png)
![](https://img.haomeiwen.com/i13837765/c99942270baaf542.png)
同理插入的时候 对应的逻辑该文章一致, 大家有兴趣可以自己去钻研一下 。
代码位置入口为:
![](https://img.haomeiwen.com/i13837765/b292bf11fb8a27d3.png)
小结
虽然是基于已有项目的扩展, 但是在扩展源码的过程中,自己也很有收获,这里只是抛砖引玉,我的实现就是最简单粗暴的,如果有算法大神的话 希望能给提供一些更快更高效的查询算法。
代码地址:
https://github.com/NealLemon/concurrent-trees/tree/develop
网友评论