我一直在使用三元搜索树作为实现自动完成下拉组合框的数据结构。这意味着,当用户键入“fo”时,将显示下拉组合框
foo 食品 足球
问题是,我目前使用的三元搜索树是区分大小写的。我的实现如下。它已被现实世界使用了大约 1++ 年。因此,我认为它非常可靠。
但是,我正在寻找不区分大小写的三元搜索树,这意味着,当我输入“fo”时,下拉组合框将显示我
foo 食物 足球
以下是 TST 的一些关键接口,我希望新的不区分大小写的 TST 也可能有类似的接口。
/**
* Stores value in the TernarySearchTree. The value may be retrieved using key.
* @param key A string that indexes the object to be stored.
* @param value The object to be stored in the tree.
*/
public void put(String key, E value) {
getOrCreateNode(key).data = value;
}
/**
* Retrieve the object indexed by key.
* @param key A String index.
* @return Object The object retrieved from the TernarySearchTree.
*/
public E get(String key) {
TSTNode<E> node = getNode(key);
if(node==null) return null;
return node.data;
}
使用示例如下。TSTSearchEngine 使用 TernarySearchTree 作为核心骨干。
// There is stock named microsoft and MICROChip inside stocks ArrayList.
TSTSearchEngine<Stock> engine = TSTSearchEngine<Stock>(stocks);
// I wish it would return microsoft and MICROCHIP. Currently, it just return microsoft.
List<Stock> results = engine.searchAll("micro");