Java - 如何在键入时有效地显示单词列表中的单词



我做了一个小的Java程序,它从txt文件加载一个单词列表,用户选择该文件并将其逐字存储在TreeSet中。 现在我需要编写一个函数,每当用户在文本字段中键入某些内容(按键)时,都会调用一个函数,并查找/返回此 TreeSet 中以用户键入的字母开头的所有单词。 我是使用 Set 的新手,所以我的解决方案是从集合中的第一个元素迭代到最后一个元素,并打印出满足条件的元素:

Iterator <String>itr = dictionary.iterator();
String currentWord;
String tempUserInput = "av"; // Temporary, to simulate user input
while(itr.hasNext()){
currentWord = itr.next();
if (currentWord.startsWith(tempUserInput)) {
System.out.println(currentWord); // Temporary, to simulate output
}
}

这工作正常,但是,由于它需要传递超过 300000 个单词才能返回值,我的问题是:有没有更有效的解决方案来解决这个问题?

最好的方法是使用适合您问题的数据结构trie。它旨在用于在处理共享前缀的元素(通常是字符串)时降低复杂性。

实际上,通过一些工作,我想您可以通过欺骗

public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)

这可以通过将当前键入的字符串作为 fromElement 传递,并将添加足够多'z'字符的相同字符串作为集合中的最长字符串作为 toElement 来工作(此长度可以在填充TreeSet时计算)。例如:

subSet("foo", true, "foozzzzzzzz", true);

最新更新