Android字典TreeSet加载时间更快

时间:2011-06-16 11:43:37

标签: android performance data-structures treeset

我的词典中有300000个单词(实际上是以我的Android设备的SD卡格式保存为txt格式(新行分隔))。 我想构建一个数据结构,尽可能减少从这个数据结构中的txt文件中插入单词(String-s)。并且这个DS必须超级快速,以检查字典(此DS)中是否存在单词。 我尝试了几个内置DS,最快的IMO是TreeSet。是否有任何其他(非内置)DS在插入/创建DS方面更快,与TreeSet相同以进行搜索?

还有一件事是我可以通过重新排列来帮助TreeSet更快地插入 我的txt文件(按正确顺序放置单词)。

此致

1 个答案:

答案 0 :(得分:5)

首先,在试验中找到适合您应用的最佳结构。通常人们会争论不试用各种方案来获得真实的绩效数据。

如果您想节省构建时间,并且您的文字文件不会经常更改,那么明显的构建速度改进就是缓存数据结构。无论您使用何种数据结构,都要构建一次结构,然后将结构存储到SD卡(而不是仅存储字符串)。可以使用Serialization存储标准java.util结构。

如果您想要最快的构建时间,并且您的单词列表按字母顺序排序,或者可以,那么您可以只存储在String数组中。构建时间将非常快,搜索时间将类似于TreeSet(使用Arrays.binarySearch())。

如果您想要更快的查找,您可能需要查看Perfect HashTrie,但这些不在Java标准库中。

trie将比其中任何一个都更加节省内存,这可能会更快。 (Information on finding an implementation

我很惊讶TreeSet在实验中比HashSet更快,这意味着您可能在内存分配昂贵的情况下运行。您是否记得在分配HashSet时设置初始容量?请记住避免昂贵的rehash,您需要将初始容量设置为至少项目数/ 0.75(负载系数)。