Android 5.0之後對HashMap的修改,androidhashmap

來源:互聯網
上載者:User

Android 5.0之後對HashMap的修改,androidhashmap

       之前發現在Android 5.0的機子上放在HashMap裡面的資料取出後跟Android 5.0之下的機子不一樣,導致項目裡面一個介面出了問題(介面做了緩衝,request參數順序變化的話就會導致一些資料拿不到),然後去查看了一下Android 5.0和Android 4.4 關於HashMap的源碼,使用meld查看差異能夠看到果然google對HashMap的實現做了修改.

       左邊為Android 5.0的源碼,右邊為Android 4.4的源碼






       從源碼中可以看到,Android 5.0 在計算key的HashCode使用的是下面的演算法.

    private static int secondaryHash(int h) {        // Spread bits to regularize both segment and index locations,        // using variant of single-word Wang/Jenkins hash.        h += (h <<  15) ^ 0xffffcd7d;        h ^= (h >>> 10);        h += (h <<   3);        h ^= (h >>>  6);        h += (h <<   2) + (h << 14);        return h ^ (h >>> 16);    }

       而Android 4.4中計算Key的HashCode的演算法明顯跟Android 5.0中不同,所以這也導致了在get之後,在兩個系統上同樣的資料不同的順序。如果對儲存的資料有順序需求的話改為使用紅/黑樹狀結構構建的TreeMap就OK了.

    static int secondaryHash(Object key) {        int hash = key.hashCode();        hash ^= (hash >>> 20) ^ (hash >>> 12);        hash ^= (hash >>> 7) ^ (hash >>> 4);        return hash;    }


轉載請註明出處:http://blog.csdn.net/l2show/article/details/46970507


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.