当前位置: 首页 > 面试题库 >

HashMap替代方案可实现内存高效的数据存储

柯甫
2023-03-14
问题内容

我目前有一个电子表格类型程序,该程序将其数据保存在HashMaps的ArrayList中。当我告诉您这还不理想时,您无疑会感到震惊。开销似乎使用的内存比数据本身多5倍。

这个问题询问有效的馆藏库,答案是使用Google馆藏。 我的跟进是“ 哪一部分?

。我一直在阅读文档,但感觉不像是哪种类最适合。(我也向其他图书馆或建议开放)。

因此,我正在寻找可以使我以最小的内存开销存储密集电子表格类型数据的东西。

  • 我的列当前由字段对象引用,行由它们的索引引用,值是对象,几乎总是字符串
  • 有些列会有很多重复的值
  • 主要操作是根据某些字段的值更新或删除记录,以及添加/删除/合并列

我知道像H2和Derby这样的选项,但是在这种情况下,我不打算使用嵌入式数据库。

编辑
:如果您建议使用库,那么如果您能将我指向其中一个或两个适用于此的特定类,我也将不胜感激。尽管Sun的文档通常包含有关哪些操作是O(1),哪些操作是O(N)等的信息,但我在第三方库中看不到很多操作,也没有任何关于哪种类最适合什么的描述。


问题答案:

因此,我假设您具有的地图Map<ColumnName,Column>,其中该列实际上是类似的ArrayList<Object>

一些可能性-

  • 您完全确定内存是个问题吗?如果您通常只是担心大小,那么值得确认这确实是正在运行的程序中的一个问题。它需要大量的行和映射来填充JVM。

  • 您可以使用集合中不同类型的地图测试数据集。根据您的数据,您还可以使用可能有用的预设大小/负载数组合来初始化地图。过去我一直在搞弄,如果幸运的话,您的内存可能会减少30%。

  • 将数据存储在单个矩阵状的数据结构(现有的库实现或类似列表列表的包装器)中,并且具有将列键映射到矩阵列的单个映射,该怎么办?



 类似资料:
  • 我正在用Python实现一个Trie。到目前为止,我遇到了两种不同的方法来实现它: -存储字符 -存储单词结尾(true或false) -存储具有当前前缀的单词数 我们派生出这本词典: 哪一种是高效的、标准的数据结构,既能有效地存储内存,又能快速地进行字的大数据集上的遍历和其他trie操作?

  • 问题内容: 我的磁盘中有40MB的文件,我需要使用字节数组将其“映射”到内存中。 最初,我认为将文件写入ByteArrayOutputStream是最好的方法,但我发现在复制操作期间的某个时刻它会占用约160MB的堆空间。 有人知道不使用三倍于RAM的文件大小的更好方法吗? 更新: 感谢您的回答。我注意到我可以减少内存消耗,告诉ByteArrayOutputStream初始大小比原始文件的大小稍大

  • 我在WinForm4.0或WPF上做一个客户端项目,问题是我如何在没有SQL server安装的客户端存储我的数据。我将提供我的应用程序的设置,这将由我的客户机运行。客户端无法安装SQL Server。NET中是否存在不需要安装sql或任何其他方式的数据库avaiable?

  • 这是为什么BigQuery在小数据集上表现不好的问题的后续问题。 假设我有一个大约1百万行的数据集。在我们当前使用的数据库(mysql)中,聚合查询的运行速度非常慢,可能需要大约10秒的时间进行复杂的聚合。在BigQuery上,所需的初始化时间可能会使此查询花费约3秒,比mysql要好,但如果我们需要在1s或更短时间内返回查询,则此工具不适合此作业。 那么,我的问题是,在对中等大小的数据集(如10

  • 我正在开发一个有ContentManager类的应用程序。该类从包中迁移文件,并在首次打开应用程序时执行其他检查。接下来,在一个相当长的ViewController链末端的view controller中使用它。据我所知,有两种实现方法: > 在第一个ViewController中实例化类,并将其通过segue传递到最终的ViewController。 在第一个ViewController中创建一

  • 我正在阅读下面Joe Albahari优秀的“C9简而言之”的摘录,并试图理解这里用粗体描述的内容。有人能用我更能理解的方式解释替代方法吗?出于某种原因,这对我来说似乎有些落后。