有比 hashmap 更好的 key value 列表吗?

听说 hashmap 很占空间,访问效率不高,对于不需要修改删除的操作(比如用 gson 搭建 API)的场景,是否有更好的 <key, value> 之类的数据类型呢?

阅读 3.1k
3 个回答

这是fastjson构造函数代码

    public JSONObject(int initialCapacity, boolean ordered){
        if (ordered) {
            map = new LinkedHashMap<String, Object>(initialCapacity);
        } else {
            map = new HashMap<String, Object>(initialCapacity);
        }
    }

关于性能,我想fastjson足够满足大部分要求,其内部使用的其实也是hashmap。
所以对于你说的很占空间,访问效率不高我不是很明白。

我实在是不理解访问效率不高和栈空间是什么意思,我猜测之所以这样所是因为如果不指定HashMap的初始容量,默认就是16,而实际上很多的HashMap的使用都不需要这么大的容量,一般在存值的时候可以知道要在Map中存储key-value的个数,直接指定初始化容量就行了,以上仅仅为猜测

听说 hashmap 很占空间,访问效率不高

因为是HashMap,所以数据存取要计算hashcode,底层数组默认会有25%的空间是浪费掉的
但是这样是为了能够有良好的随机访问能力

也就是说,如果没有随机访问的需求,HashMap确实是浪费的,比如安卓上的ArrayMap就是针对“没有随机访问”的场景设计的

另外还有像 MultiValueMapIntMap之类的东西,也都是针对特殊场景提供特殊功能或者特殊优化的(虽然都不是jdk自带的)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题