多级 Hashmap的优化

Posted1 by 呼延十 on September 9, 2019 Hot:

最近忙的好久没有写文章了, 随便写点东西~

Java程序员想必对Map<String,Map<String,Object>>类型的数据结构很熟悉, 并且深恶痛绝,在以前介绍过一种通用的处理方法, 我们可以用一些三方包或者自定义一种Table的数据结构, 可以让代码稍微清晰一点.

今天提出一个在特定条件下的解决方案:

  1. 当数据结构为Map<Integer,Map<Integer,Object»
  2. 当前很追求性能.

解决方案其实是利用了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,性能还能有一些提高.

在日常的编码中,我们更倾向于”通用”,比如封装一个类,在什么情况下都能用, 什么对象都能存放,但在一些极致追求性能的场景, 一些定制化开发往往能够提升更多的性能.


完。



ChangeLog

2019-09-09 完成

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com

更多学习笔记见个人博客——>呼延十