Android字典TreeSet加载时间更快

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

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

问候

解决方法:

首先,在试验中找到最适合您应用的结构.通常人们会争论不试用各种选项来获得真实的性能数据.

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

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

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

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

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

上一篇:JAVA小练习112——TreeSet的练习(2)


下一篇:JAVA小练习113——例如String str="8 10 15 5 2 7"; 要求使用TreeSet对象把字符串拼接成如下格式: "2 5 7 8 10 15&