在Java中创建,搜索和修改(key,value1,value2)的最佳方法

时间:2016-08-28 18:28:34

标签: java arrays collections set storing-data

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

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

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

  1. 由(字符串,数组)
  2. 组成的地图
  3. 2D数组(我将字符串拉长为长和背)
  4. 一个元组对象
  5. 我是否忽略了其他可能的解决方案?如果没有,你建议我用哪个?

    提前致谢!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

#2的类似(如果同样令人反感)选项是使用128位BigInteger。一个更好的选择,虽然仍然有点hacky,将使用UUID,这样可以轻松访问更高和更低的长值:

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

最"适当"解决方案通常是创建一个自定义类来传达值代表什么以及它们如何相关。如果他们没有关系并且他们只是共享一个共同的密钥,那么为每组价值保留一个单独的地图可能是值得的。