鍍金池/ 問答/Java  PHP/ 有比 hashmap 更好的 key value 列表嗎?

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

聽說 hashmap 很占空間,訪問效率不高,對于不需要修改刪除的操作(比如用 gson 搭建 API)的場景,是否有更好的 <key, value> 之類的數(shù)據(jù)類型呢?

回答
編輯回答
莓森
聽說 hashmap 很占空間,訪問效率不高

因?yàn)槭?code>HashMap,所以數(shù)據(jù)存取要計(jì)算hashcode,底層數(shù)組默認(rèn)會(huì)有25%的空間是浪費(fèi)掉的
但是這樣是為了能夠有良好的隨機(jī)訪問能力

也就是說,如果沒有隨機(jī)訪問的需求,HashMap確實(shí)是浪費(fèi)的,比如安卓上的ArrayMap就是針對“沒有隨機(jī)訪問”的場景設(shè)計(jì)的

另外還有像 MultiValueMap,IntMap之類的東西,也都是針對特殊場景提供特殊功能或者特殊優(yōu)化的(雖然都不是jdk自帶的)

2018年7月13日 19:29
編輯回答
網(wǎng)妓

我實(shí)在是不理解訪問效率不高和??臻g是什么意思,我猜測之所以這樣所是因?yàn)槿绻恢付℉ashMap的初始容量,默認(rèn)就是16,而實(shí)際上很多的HashMap的使用都不需要這么大的容量,一般在存值的時(shí)候可以知道要在Map中存儲(chǔ)key-value的個(gè)數(shù),直接指定初始化容量就行了,以上僅僅為猜測

2017年10月23日 11:09
編輯回答
深記你

這是fastjson構(gòu)造函數(shù)代碼

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

關(guān)于性能,我想fastjson足夠滿足大部分要求,其內(nèi)部使用的其實(shí)也是hashmap。
所以對于你說的很占空間,訪問效率不高我不是很明白。

2018年3月21日 17:27