Java 我需要将30k键值对条目存储到我的android应用程序中

Java 我需要将30k键值对条目存储到我的android应用程序中,java,android,hashtable,Java,Android,Hashtable,我需要为我的android应用解析一个包含大约30k个键值对数据的文档。存储这些键值的最佳(最快或最简单)方法是什么?它是哈希表吗?android SharedReferences?还是安卓sqlite 感谢您的阅读,如有任何建议,我们将不胜感激^^ 如果您不想同时将它们全部存储在内存中,我会选择sqllite(不确定是否最快,但至少会减少运行时内存消耗,这是一个非常重要的因素,因为android限制每个进程/应用程序的可用内存)。您可以使用共享引用。您也可以通过序列化将映射写入文件,因此一旦将

我需要为我的android应用解析一个包含大约30k个键值对数据的文档。存储这些键值的最佳(最快或最简单)方法是什么?它是哈希表吗?android SharedReferences?还是安卓sqlite


感谢您的阅读,如有任何建议,我们将不胜感激^^

如果您不想同时将它们全部存储在内存中,我会选择sqllite(不确定是否最快,但至少会减少运行时内存消耗,这是一个非常重要的因素,因为android限制每个进程/应用程序的可用内存)。

您可以使用
共享引用
。您也可以通过
序列化
将映射写入文件,因此一旦将输入文件加载到HashMap中,您就可以执行以下操作:

    FileOutputStream fStream = openFileOutput("saved-map", Context.MODE_PRIVATE) ;
    ObjectOutputStream oStream = new ObjectOutputStream(fStream);

    oStream.writeObject(map);        
    oStream.flush();
    oStream.close();

SQLLite
也是一个很好的选择,但是上面两种存储类型快速且易于实现。

这些存储类型之间存在一些极端的差异。这完全取决于您使用的用例

SharedReferences
很可能是一个错误的调用。管理所有这些键,并且无法在首选项文件中迭代它们,这在很大程度上是不可取的

哈希表只将数据存储在内存中,每当Android终止应用程序或释放内存时,哈希表就会丢失。此外,这是一个巨大的内存负担,取决于您存储的数据类型。(一个
int,int
map可能没那么糟糕。)


最有可能的最好方法是通过后台线程中的SQLite。正如我所说的,这取决于您的用例,但是如果没有速度损失或过度使用内存,您将无法管理30k密钥。这只是对当今技术的限制。

我也需要能够快速访问它们。我认为sqlite会让它变慢,因为每次访问它时,我都需要进行一次查询。我想这种慢是可以忽略不计的,这也是一种折衷。我建议在决定它是否会变慢之前先进行测试。这取决于您以后要如何访问它们…我最有可能存储(字符串,字符串)键值对。我同意你们大多数人的看法,sqlite是存储大量数据的更好选择,但不幸的是,在我的情况下,每次检索这些数据时,我可能需要进行大量查询。每次当我需要这些数据时,我需要做大约500到1000个查询,我确信如果从SQLite查询,这将是非常非常慢的。@小威,我想你需要考虑优化数据。500个查询太多了,您真的不需要在短时间内完成这么多查询。例如,您可以执行
SELECT。。。如果id>='0'和id Phil,您能解释一下序列化吗?我对它不太熟悉。thanks@xiaowoo,序列化是将对象作为位写入文件的方式。在Java中,简单类型(字符串、数字等)以及简单类型的集合可以通过这种方式保存。然后,它将被视为您保存的文件,并将在会话中保持不变。下面是一个很好的使用示例: