我有500万个键值对。请建议用于存储如此庞大数据的相关数据结构。如果我的数据将来可以扩展到10亿个键值对怎么办?请建议使用Java中的数据结构来容纳这些数据。
答案 0 :(得分:4)
Hash tables 支持最有效的搜索方式之一。
答案 1 :(得分:1)
您可能想要使用TreeMap。要回答关于在内存中执行此操作的问题,它不能同时在内存中(至少在2011年的桌面上使用今天的标准技术),您希望在数据中进行分块。由于信息已经使用树形图进行排序,因此您可以使用二进制排序或其中一个变体有效地确定树中的位置。 Trove不会修复与JVM设置有关的内存不足异常。
答案 2 :(得分:1)
任何数据结构都可以存储大量信息,但要知道您需要使用哪种信息,您必须考虑如何添加,删除和访问信息。您可能还必须考虑信息是否需要保留在内存中,或者是否只接受内存中最近/最常使用的数据部分。
键值对意味着Map
s,它们通常是键值对的集合。但是,有很多方法可以实现Map
,从一个简单的数组(需要连续的键,所有整数)到B-Trees的键,以及对它们的值的相关引用。
在不知道程序的运行特性应该是什么的情况下,无法知道算法或数据结构对于数据集大小是否“足够好”。
按字母顺序排列完整列表,键值对的有序列表最快。使用可用的完整密钥进行搜索,HashMap(或基于哈希的算法)将为您提供良好的服务。使用可以部分匹配密钥的模式进行搜索,可能是为了便于搜索而订购的密钥树更好。简而言之,除了预期的数据集大小外,它还取决于数据的使用方式。
答案 3 :(得分:0)
所有这些数据都需要在内存中?如果答案是否定的,您可以使用数据库并通过密钥索引数据。
如果上述问题的答案是肯定的:您打算存储哪种对象?它们可以表示为原始数据类型吗?我建议您查看Trove库中实现的高速集合。