java - 我是否应该在 Android 应用程序上将缓冲读取更改为内存中/标记化以读取 100,000 行文件?

标签 java android hashmap tokenize sortedmap

目前,我正在使用缓冲读取将包含 100,000 行的文本文件加载到 SortedMap 中。我是否应该放弃这种方法,而是将整个文件加载到内存中,然后通过换行标记到 SortedMap 中?请注意,我必须解析每一行以提取键并创建一个每个键的支持对象,然后将其插入到 SortedMap 中。该文件大小小于 4MB,符合 Android 内存中文件大小限制。我想知道切换到内存方法是否值得,或者所获得的加速是否不值得。

此外,HashMap 会比 SortedMap 快很多吗?我只需要按键查找,并且如果需要的话可以在没有排序键的情况下生存,但如果有的话那就太好了。如果有比我正在使用的更好的结构,请告诉我,如果您有任何与此问题相关的 Android 速度提示,也请提及。

--罗施勒

最佳答案

我不清楚为什么将整个文件加载到内存中然后标记化会更简单。一次读取一行并以这种方式解析它非常简单,不是吗?虽然我完全赞成一次性加载所有内容,因为它真正使事情变得更简单,但我看不出这里会变得更加容易。

至于 SortedMapHashMap - 如果没有很多哈希冲突,通常 HashMap 查找的时间复杂度为 O(1),但是如果没有相等的元素,SortedMap 查找的时间复杂度仅为 O(log n)。与对象模型中的哈希计算相比,比较的成本有多高?对于 100,000 个元素,每次查找将进行大约 16-17 次比较。最终,我不想猜测哪个会更快 - 您应该测试它,就像所有性能选项一样。也看看内存使用情况...我希望 SortedMap 使用更少的内存,但我很容易错。

关于java - 我是否应该在 Android 应用程序上将缓冲读取更改为内存中/标记化以读取 100,000 行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674366/

相关文章:

java - 模块之间的依赖管理

java - Dagger 2 : Provide same instance between multiple Component with same Scope on different library modules

java - 如何在NT3H2111 nfc芯片上选择扇区

android - 在 Android 上停止属于另一个应用程序的服务

java - 为什么 HashMap 快速失败只是因为它提供了一种迭代其键的方法?

java - 使用 Jersey 2 提供静态文件

java - 如何(无需每次重新连接和关闭套接字)从Android或java中的套接字接收许多文件

java - 在包含字符串和 double 的外部文本文件上使用扫描仪

java - Java中的队列编程不会更新队列

Java Hashmap 设置一个元素更新所有元素