最近忙的好久没有写文章了, 随便写点东西~
Java程序员想必对Map<String,Map<String,Object>>
类型的数据结构很熟悉, 并且深恶痛绝,在以前介绍过一种通用的处理方法, 我们可以用一些三方包或者自定义一种Table的数据结构, 可以让代码稍微清晰一点.
今天提出一个在特定条件下的解决方案:
解决方案其实是利用了int 32位, long 64位, 使用一个long来存储两个int
.
如下面的代码:
// int->(int->double)
Map<Integer, Map<Integer, Double>> a = new HashMap<>();
Map<Integer, Double> value = new HashMap<>();
value.put(2, 0.2);
a.put(1, value);
//long->double
Map<Long, Double> b = new HashMap<>();
b.put((1L << 32) + 2, 0.2);
我对以上这种方式进行了一些测试, 数据统计如下:
次数 | 两个int | long | long/int时间比例 |
---|---|---|---|
1000000 | 0.64ms | ||
10000000 | 163ms | 103ms | 0.65 |
100000000 | 1010ms | 648 | 0.68 |
可以看到, 性能优化之后,时间基本上是原来的65%左右, 如果还想优化的话, 可以使用 简易却高效的HashMap实现文章中的方式,实现自己的IntHashMap,性能还能有一些提高.
在日常的编码中,我们更倾向于”通用”,比如封装一个类,在什么情况下都能用, 什么对象都能存放,但在一些极致追求性能的场景, 一些定制化开发往往能够提升更多的性能.