我想在Java中创建一个包含大约10 000个单词对的字典,但我不知道应该使用哪种数据结构。如果我在字典中有一个单词,例如because
,我希望程序找到它,如果我只搜索bec
。如果我有the end
这样的词组,我希望在搜索th
或en
时找到它。
我尝试ArrayList
,但搜索速度很慢。我不想使用实现Map
接口的类,因为它们只能为一个键存储一个值,因此我无法按上述方式进行搜索。
这个答案列出了字典的一些数据结构,但我认为它们对我来说是最好的:Best data structure for implementing a dictionary?
答案 0 :(得分:1)
您要搜索的内容为trie。
由于java框架似乎没有一个实现,请查看this thread以获取可能的库和解决方案:
答案 1 :(得分:0)
您可以使用NavigableSet,它允许您进行部分查找。
int bitsSoFar = 0;
int retval = 0;
while(mask) { // Until we've looked up all bits.
int mask4 = mask & 0xF;
int input4 = input & 0xF;
retval |= LUT[mask4][input4] << bitsSoFar;
bitsSoFar += bitsIn[mask4];
mask >>= 4;
input >>= 4;
}
打印
NavigableSet<String> words = new TreeSet<>();
words.add("tee");
words.add("the");
words.add("there");
words.add("tidy");
String th = words.higher("th");
System.out.println("th ... "+th);
如果你想要多个单词,你可以做到
th ... the
打印
NavigableSet<String> words = new TreeSet<>();
words.add("tee");
words.add("the");
words.add("their");
words.add("there");
words.add("tidy");
String start = "th";
for (String w : subSet(start, start + '\uffff')) {
System.out.println(start + " ... " + w);
}
您可以使用单独的地图逐字查找短语。
注意:这比使用SQL数据库快1000到10000倍。
答案 2 :(得分:0)
如果您填写一次字典然后只进行搜索,这是最快的解决方案。
以相同字母开头的单词将彼此相邻堆叠。
其他树索引仅在数据足够大时才有用。