亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JDK源碼之解讀hashMap 的put和get方法的實現原理

2019-11-10 18:16:40
字體:
來源:轉載
供稿:網友
JDK源碼之解讀hashMap 的put和get方法的實現原理1,put             對于方法hashmap.put(K,V),首先是把k處理,通過hashcode方法處理得到K對應的hash=hash(K).             再調用h & (length-1)得到數組下標i. 最后調用createEntry(hash, key, value, i)方法,把hash,key,value存入table[i]一維數組中。源碼如下:             
 public V put(K key, V value) {        if (key == null)            return putForNullKey(value);        int hash = hash(key);        int i = indexFor(hash, table.length);        for (Entry<K,V> e = table[i]; e != null; e = e.next) {            Object k;            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {                V oldValue = e.value;                e.value = value;                e.recordaccess(this);                return oldValue;            }        }        modCount++;        addEntry(hash, key, value, i);        return null;    }
 final int hash(Object k) {        int h = 0;        if (useAltHashing) {            if (k instanceof String) {                return sun.misc.Hashing.stringHash32((String) k);            }            h = hashSeed;        }        h ^= k.hashCode();        // This function ensures that hashCodes that differ only by        // constant multiples at each bit position have a bounded        // number of collisions (apPRoximately 8 at default load factor).        h ^= (h >>> 20) ^ (h >>> 12);        return h ^ (h >>> 7) ^ (h >>> 4);    }
 void addEntry(int hash, K key, V value, int bucketIndex) {        if ((size >= threshold) && (null != table[bucketIndex])) {            resize(2 * table.length);            hash = (null != key) ? hash(key) : 0;            bucketIndex = indexFor(hash, table.length);        }        createEntry(hash, key, value, bucketIndex);    }
總結就是說,先用鍵生成hashcode,然后把鍵和值存入一個對象為鍵值對的一維數組中,位置是,按生成hashcode轉變得到的數字作為一維數組的下標。
有人會說,萬一生成的hashcode一樣咋辦?=== 因為他是把鍵值對存入一維數組中,鍵是唯一的,所以hashcode一樣時候,根據對象里面的鍵不同,一樣可以取出唯一對應的值。
2,get           弄懂put方法原理,這個就很簡單了。根據對應的鍵,找到hashcode,去一維數組根據hashcode生成的下標去取對應的值,           如果hashcode一樣,根據唯一鍵在一位數組里面取值。源碼如下:          
  public V get(Object key) {        if (key == null)            return getForNullKey();        Entry<K,V> entry = getEntry(key);        return null == entry ? null : entry.getValue();    }
  final Entry<K,V> getEntry(Object key) {        int hash = (key == null) ? 0 : hash(key);        for (Entry<K,V> e = table[indexFor(hash, table.length)];             e != null;             e = e.next) {            Object k;            if (e.hash == hash &&                ((k = e.key) == key || (key != null && key.equals(k))))                return e;        }        return null;    }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情在线观看| 国产日韩精品一区二区| 久久精品国产2020观看福利| 91国在线精品国内播放| 91国内免费在线视频| 国内精品视频一区| 26uuu日韩精品一区二区| 国产一区二区三区中文| 精品人伦一区二区三区蜜桃免费| 欧美日韩国产精品一区| 亚洲韩国青草视频| 久久亚洲精品一区二区| 国产精品永久免费视频| 亚洲老头老太hd| 国产亚洲视频在线观看| 欧美—级高清免费播放| 成人情趣片在线观看免费| 国产欧美日韩免费看aⅴ视频| 日韩欧美在线视频日韩欧美在线视频| 亚洲欧美变态国产另类| 青青青国产精品一区二区| 亚洲精品视频免费在线观看| 91欧美视频网站| 26uuu亚洲国产精品| 国产91在线播放精品91| 亚洲理论片在线观看| 精品视频在线播放免| 精品视频在线播放| 日韩av在线播放资源| 亚洲第一视频网| 亚洲第一区在线观看| 91网站在线免费观看| 波霸ol色综合久久| 91久久嫩草影院一区二区| 国产精品v片在线观看不卡| 国产精品久久久久久久av电影| 国产精品美女久久久久av超清| 日韩av在线影院| 久久久亚洲国产| 中文字幕一区日韩电影| 久久的精品视频| 91中文字幕在线观看| 亚洲精品中文字幕有码专区| 久久视频这里只有精品| 欧美性视频网站| 在线日韩欧美视频| 国产精品揄拍500视频| 91久久久久久久久久久久久| 91精品久久久久久久久不口人| 欧美贵妇videos办公室| 欧美精品手机在线| 亚洲午夜国产成人av电影男同| 亚洲国产精品大全| 欧美性猛交xxxx久久久| 国产一区二区三区18| 亚洲人永久免费| 欧美日韩激情小视频| 一区二区成人av| 国产91色在线|免| 性日韩欧美在线视频| 国产成人精品一区二区| 亚洲国内精品在线| 欧美精品免费在线| 久久影院在线观看| 久久99精品久久久久久噜噜| 国产成人精品电影| 国产精品欧美激情在线播放| 国产综合色香蕉精品| 欧洲日本亚洲国产区| 日韩中文字幕视频| 日韩在线观看免费全集电视剧网站| 亚洲欧美日韩中文在线制服| 国产91色在线免费| 国产激情视频一区| 日韩在线中文字幕| 国产精品高潮在线| 国产精品欧美激情在线播放| 日韩av不卡在线| 日韩中文字幕在线精品| 国产精品第三页| 日韩av在线一区| 欧美大片免费观看在线观看网站推荐| 久久亚洲精品国产亚洲老地址| www国产亚洲精品久久网站| 欧美激情亚洲精品| 91av在线国产| 亚洲伊人第一页| 中文国产成人精品久久一| 欧美性猛交xxxx乱大交蜜桃| 情事1991在线| 精品高清一区二区三区| 777国产偷窥盗摄精品视频| 成人福利在线观看| 日韩精品高清在线| 国产日本欧美一区二区三区在线| 久久99精品久久久久久琪琪| 久久综合伊人77777蜜臀| 久久久国产一区二区三区| 久久久视频精品| 欧美成人自拍视频| 成人妇女免费播放久久久| 久久久在线观看| 欧美专区在线播放| 国产视频精品在线| 色多多国产成人永久免费网站| 91精品久久久久久久久久| 亚洲一区二区三区xxx视频| 97在线视频国产| 亚洲欧美国产精品专区久久| 欧美午夜片在线免费观看| 日韩欧美中文免费| 国产精品美女久久久久久免费| 菠萝蜜影院一区二区免费| 日本免费一区二区三区视频观看| 55夜色66夜色国产精品视频| 成人福利免费观看| 亚洲精品乱码久久久久久按摩观| 韩日欧美一区二区| 国产91对白在线播放| 欧美日韩一区二区精品| 51ⅴ精品国产91久久久久久| 欧美激情第一页xxx| 色爱av美腿丝袜综合粉嫩av| 欧美另类69精品久久久久9999| 日韩在线中文视频| 国产精品美女视频网站| 亚洲黄色免费三级| 亚洲电影免费观看高清完整版在线观看| 成人精品一区二区三区| 亚洲欧美制服另类日韩| 97超碰蝌蚪网人人做人人爽| 国产剧情日韩欧美| 97视频在线播放| 国产原创欧美精品| 精品magnet| 91精品国产91久久久久久最新| 91在线观看欧美日韩| 久久久久久久爱| 中文字幕一区二区精品| 日本高清久久天堂| 色综合色综合久久综合频道88| 久久影视电视剧免费网站| 国产色视频一区| 日韩精品欧美国产精品忘忧草| 久久激情视频久久| 国产日韩在线精品av| 亚洲精品免费在线视频| 色综合久久88| 5566成人精品视频免费| 亚洲黄页网在线观看| 日韩电视剧在线观看免费网站| 正在播放亚洲1区| 亚洲一级黄色av| 亚洲人成毛片在线播放| 免费91麻豆精品国产自产在线观看| 国产日韩欧美另类| 欧美xxxx做受欧美| 国产精品美女免费视频| 欧美日韩一区二区三区| 国产成人亚洲综合青青| 欧美大胆a视频| 欧美激情女人20p| 国产精品白嫩初高中害羞小美女| 亚洲成人精品在线|