Java 存储大约200K SHA256哈希的最节省内存的方法
我需要在内存中以二进制形式存储大约200000个SHA256哈希。Java 存储大约200K SHA256哈希的最节省内存的方法,java,algorithm,data-structures,Java,Algorithm,Data Structures,我需要在内存中以二进制形式存储大约200000个SHA256哈希。 我的要求是, 数据结构应该是内存效率最高的 我将按排序顺序(插入顺序不重要)读回散列,因此,数据结构支持 词典阅读更好 如果可以比较同一类型的两个结构以找到其中的公共哈希,这将是一个加号(尽管不是强制性的) 以下是我考虑的数据结构 阵列: 数组似乎是最简单和内存效率最高的一种,但我不能使用数组,因为 我必须在读取数据时对其进行排序。数据结构本身不支持它 由于200K哈希不是一个硬限制,而且还可以超过这个限制,所以我在分配数组
我的要求是,
- 数据结构应该是内存效率最高的
- 我将按排序顺序(插入顺序不重要)读回散列,因此,数据结构支持 词典阅读更好
- 如果可以比较同一类型的两个结构以找到其中的公共哈希,这将是一个加号(尽管不是强制性的)
我仍然不明白/不确信,压缩基数Trie不是内存最佳数据结构吗?如果没有,哪种数据结构最适合我的需要 如果基数trie是已知的最好的一个,那么有没有一个最优算法,它会比较两个基数,试图找出其中的公共散列
附言:我在SO上发现了以下类似的问题,但它们并没有解决我的问题: :这篇文章没有太多像“不具建设性”这样封闭的信息,答案是关于寻找电话号码的增量。但是散列的增量没有帮助吗
:这是关于存储键值映射的,答案是要求使用数据库。哪里是
ArrayList
?您的阵列问题似乎相对容易解决。此外,数组包含引用,而不是实际的字符串,因此实际上并不是一次在内存中存储两个哈希。ArrayList
与数组相同,只是它们的实现是抽象的。但是,必须进行阵列复制。是的,只有引用被复制了,但即使这样对我来说也太过分了,与其他结构相比,旧阵列上的200K和新阵列上的300K似乎有点太多了。a呢?你希望阵列多久更新一次?sha256二进制字符串为32字节。32*300000约为960万。即使你考虑8个额外的字节供参考(64位),它的40×300000=12M,这对我来说似乎并不多。在使用ArrayList时,您是否考虑过(这就是为什么问您希望它更新的频率)?@Codebender实际上没有太多内存。ArrayList
在哪里?您的阵列问题似乎相对容易解决。此外,数组包含引用,而不是实际的字符串,因此实际上并不是一次在内存中存储两个哈希。ArrayList
与数组相同,只是它们的实现是抽象的。但是,必须进行阵列复制。是的,只有引用被复制了,但即使这样对我来说也太过分了,与其他结构相比,旧阵列上的200K和新阵列上的300K似乎有点太多了。a呢?你希望阵列多久更新一次?sha256二进制字符串为32字节。32*300000约为960万。即使你考虑8个额外的字节供参考(64位),它的40×300000=12M,这对我来说似乎并不多。在使用ArrayList时,您是否考虑过(这就是为什么会问您希望它多久更新一次)?@Codebender这实际上并没有太多内存。