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