前面介紹了Ternary Search Tree和它的實現,那麼能夠用Ternary Search Tree來實現搜索框的只能提示,由於Ternary Search Tree的前綴匹配效率是很是高的,整體思路以下(其中不少能夠根據本身的須要修改,我只是寫出個人作法):dom
好比搜索歌曲時智能提示:spa
創建Ternary Search Tree 對象
-
將全部歌曲名的字符串放置在一個map中,key爲歌曲名、value存儲歌曲信息,能夠是一個類對象domain,在這裏能夠按照key值將相同歌曲的播放次數累加,並將歌曲名轉爲拼音,使用的是pinYin4J
-
將map轉爲歌曲對象list存儲
-
在Node類中新增一個字段,index用以存放一個對象在list的下標值(這是關鍵的一部,是爲了在Ternary Search Tree中查詢到前綴爲a的全部歌曲名拼音後,能獲取到相應的index,直接在list中get(index),即能獲取該歌曲的相應信息)
-
按照一首一尾將歌曲名拼音和該歌曲在list中的index插入到Ternary Search Tree中,緣由參考--------------------------,爲了使Ternary Search Tree平衡
查詢 排序
查詢時,好比用戶輸入a,那麼全部以a爲前綴的歌曲名都要被搜尋出來字符串
-
去Ternary Search Tree中查詢以a爲前綴的歌曲名,存入map,key爲歌曲名拼音,value爲index
-
根據index取得相應歌曲的信息
-
將歌曲播放數量做爲value,index做爲key放入treemap進行排序,改寫comparator降序排列
-
從treemap中取n條記錄,獲得對應的resultList,根據index獲取到相關歌曲信息
-
返回
總結一下,Ternary Search Tree是用來查詢前綴匹配的全部歌曲get
將全部匹配的歌曲查詢出來後,還有根據某一字段排序等等進行一系列處理。效率
即 Ternary Search Tree查詢 + topK排序擴展
擴展 List
高亮功能 搜索
首字母匹配,即多創建一棵樹,查詢後按照播放次數排序去重
序列化Trie,避免每次重啓都須要重建Trie,致使服務不可用
……