【问题标题】:Efficiency regarding storing HashMap values vs. referencing values存储 HashMap 值与引用值的效率
【发布时间】:2014-06-27 15:23:11
【问题描述】:

大家早上好!我今天正在使用哈希映射进行编码,并且想知道在某种情况下的效率比较,我希望没有得到回答。假设我有一个数据文件,其中每一行都是一个条目,三列包含以下字段:块数、起始块、结束块。我使用哈希映射,其中键是三列数据字段。我基本上可以通过获取该条目的结束块,减去起始条目并添加一个来找出每个条目的块数。例如:

块数|起跑器 |结束块

    2           1          2          

哪个更有效:从哈希图中简单地省略块数字段,并通过 map.get("ending block") - map.get("starting block") + 1 (在此case 是 2-1+1),或者简单地将块数存储在映射 X 条目数中并通过 map.get("num of blocks"); 调用它;

对不起,如果这是一个愚蠢的问题,因为我在使用哈希映射方面只有一点经验。

【问题讨论】:

  • 我不确定,但如果我是你,我会通过使用 System.nanoTime() 查找计算时间和使用 java 垃圾收集器查找内存使用情况来进行性能测试。不过,这并不能回答您的问题,抱歉!
  • @Aayush 实际上这是一个非常好的主意。我现在会这样做,但不幸的是我在工作。如果我没有得到答复,我肯定会尝试不同数量的条目。感谢您的建议!
  • 你为什么要使用地图?为什么不用两个变量来保存开始和结束块??
  • @Bohemian 实际上,我将处理超过上述三列的大量数据,并且我必须重新组织输出数据,因此将值分配给键似乎是最有效的处理所述数据的方式。

标签: java performance hashmap


【解决方案1】:

这取决于您的数据和哈希映射的用途。 如果数据很大,那么您就不需要存储块的数量。但是,如果您负担得起,那么我会说可能保留它,因为您只需要输入一次,然后您就可以多次获得它。所以本质上你只是在地图上调用一个 get 。而如果你不存储它,你会从哈希图中获取两个值。 另一种情况是,如果您每次都需要获取起始块和结束块而不考虑用例,那么您可以省略块数,因为无论如何您都必须进行这些 get 调用。

希望我回答了您的问题。

【讨论】:

  • 其实这点很好。我必须使用开始和结束块。但我更好奇的是,一个商店和一个电话是否比两个电话更有效率。
  • 正如我所说,存储和调用效率更高,因为您将存储一次并读取多次。每次读取一个值而不是两个值会更好。
猜你喜欢
  • 2014-02-20
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多