【问题标题】:Best way to create, search and modify (key ,value1, value2) in Java在 Java 中创建、搜索和修改 (key ,value1, value2) 的最佳方式
【发布时间】:2017-01-04 18:58:22
【问题描述】:

我的程序正在搜索日志,并计算某些事件发生的次数(以及与每个事件关联的字节数)。我想将我感兴趣的事件存储为 (key, value1, value2),其中字符串是键,值是两个长整数。我需要能够搜索结构中是否存在键,并且我需要能够修改两个长值。

我不会走数据库路线或将数据存储在另一个文本文件中。

我没有成功使用 Stack Overflow 搜索找到一些东西,Oracle 教程和集合文档对我帮助不大。我的选择(据我所知)是:

  1. 由(字符串、数组)组成的映射
  2. 2D 数组(我将字符串调换成 long 并返回)
  3. 元组对象

我是否忽略了其他更好的可能解决方案?如果没有,你建议我使用哪个?

提前致谢!

【问题讨论】:

  • 我不明白为什么哈希映射不能简单地完成这项工作。好像没那么复杂
  • @VicSeedoubleyew oracle 文档声明“每个键最多可以映射到一个值”,我需要一个键来映射到两个值。见docs.oracle.com/javase/6/docs/api/java/util/Map.html。我认为带有字符串键和元组的映射是要走的路(Aaron Davis 的回答)。
  • 是的,这就是我所说的简单哈希图的意思。存储值元组或存储值没有太大区别

标签: java arrays collections set storing-data


【解决方案1】:

与#2 类似但同样令人反感的选项是使用 128 位 BigInteger。更好的选择是使用UUID,虽然仍然有点老套,但它可以轻松访问更高和更低的 long 值:

// set
map.put(key, new UUID(value1, value2);
// get
value1 = map.get(key).getMostSignificantBits();

最“正确”的解决方案通常是创建一个自定义类来传达值所代表的内容以及它们之间的关系。如果他们没有关系并且他们只是共享一个公共键,那么为每组值保留一个单独的映射可能是值得的。

【讨论】:

    【解决方案2】:

    很难说出您所说的“最佳”是什么意思,但我会这样做。我有一个带有字符串键和一个简单元组对象的值的映射。您“可能”能够手动获得更好的性能,但是使用地图的集合实现是最容易使用的,更重要的是,其他人最容易理解谁可能需要稍后阅读/维护它。另外,请注意过早的优化。 :-)

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2017-01-14
      • 2020-01-17
      • 2010-10-12
      相关资源
      最近更新 更多