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

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

hashmap源碼解析

2019-11-11 05:23:17
字體:
來源:轉載
供稿:網友

-----------------------------------------------------put涉及的函數---------------------------

hashmap的put方法:

//HashMap會對key=null的進行特殊處理的函數

PRivate V putForNullKey(V value) {

        //遍歷entry數組,如果存在key=null就覆蓋,并返回舊值        for (Entry<K,V> e = table[0]; e != null; e = e.next) {            if (e.key == null) {                V oldValue = e.value;                e.value = value;                e.recordaccess(this);                return oldValue;            }        }

        //修改次數加1        modCount++;

        //參數為hash值,key值,value值,存放在table[0]位置        addEntry(0, null, value, 0);        return null;    }

//如果大于臨界值就擴容,如果加入的位置有值,則將該位置原先的值設為新entry的next,即新插入的值作為頭結點

 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);    }

public V put(K key, V value) {        if (table == EMPTY_TABLE) {            inflateTable(threshold);        }

        //HashMap會對key=null的進行特殊處理,如果key為null的話,hash值為0,對象存儲在數組中索引為0的位置。參加上函數解析        if (key == null)            return putForNullKey(value);

        //計算hash值        int hash = hash(key);

        //hash值與table.index按位與計算value存放在table的index位置        int i = indexFor(hash, table.length);

        //遍歷entry數組,遍歷table[index]位置處的值,如果這個值的hash值相同,key相同,則覆舊值,并返回舊值        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;            }        }        //修改次數加1        modCount++;

       //添加 key value 到table[i] 處        addEntry(hash, key, value, i);        return null;    }

//擴容

void resize(int newCapacity) {        Entry[] oldTable = table;        int oldCapacity = oldTable.length;        if (oldCapacity == MAXIMUM_CAPACITY) {            threshold = Integer.MAX_VALUE;            return;       }        //聲明一個2倍容量的entry數組        Entry[] newTable = new Entry[newCapacity];

        transfer(newTable);//用來將原先table的元素全部移到newTable里面        table = newTable;  //再將newTable賦值給table        threshold = (int)(newCapacity * loadFactor);//重新計算臨界值    }

------------------------------------hanshmap get涉及的函數----------------

//get得到value值

public V get(Object key) {

        if (key == null)            return getForNullKey();//和getEntry函數類似,只不過hashcode為0而已        Entry<K,V> entry = getEntry(key);//根據key得到entry對象        return null == entry ? null : entry.getValue();    }

//針對key==null處理得到值的函數

private V getForNullKey() {        if (size == 0) {            return null;        }        for (Entry<K,V> e = table[0]; e != null; e = e.next) {            if (e.key == null)                return e.value;        }        return null;    }

//根據key返回entry對象

final Entry<K,V> getEntry(Object key) {        if (size == 0) {            return null;        }

        //key--null的存放在table[0]位置,hashcode也為0,否則根據key計算hashcode        int hash = (key == null) ? 0 : hash(key);

        //根據hashcode和tableindex按位與計算存放在table的index位置

        //遍歷entry數組處的index位置,如果這個hashcode想等,并且key相同,則返回這個entry對象

        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;    }

-----------------------hashmap remove 函數-----------------

public V remove(Object key) {        Entry<K,V> e = removeEntryForKey(key);//得到刪除對象        return (e == null ? null : e.value);//key不存在,刪除對象不存在,返回null ,否則返回刪除對象的value值

    }

 

    final Entry<K,V> removeEntryForKey(Object key) {        if (size == 0) {            return null;        }        int hash = (key == null) ? 0 : hash(key);        int i = indexFor(hash, table.length);        Entry<K,V> prev = table[i];//此key存在的entry對象標記為prev        Entry<K,V> e = prev;//prev 賦值給e        while (e != null) {            Entry<K,V> next = e.next;//得到當前對象的下一個對象            Object k;            if (e.hash == hash &&                ((k = e.key) == key || (key != null && key.equals(k)))) {                modCount++;                size--;                if (prev == e)                    table[i] = next;                else                    prev.next = next;                e.recordRemoval(this);                return e;            }            prev = e;            e = next;        }        return e;    }

//是否含有某value

public boolean containsValue(Object value) {        if (value == null)            return containsNullValue();        Entry[] tab = table;        for (int i = 0; i < tab.length ; i++)//遍歷table[index]            for (Entry e = tab[i] ; e != null ; e = e.next)//遍歷index位置的entry數組                if (value.equals(e.value))                    return true;        return false;    }


上一篇:final 關鍵字

下一篇:PAT甲級1087

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情亚洲综合一区| 亚洲欧美精品一区| 国内精久久久久久久久久人| 日韩av一区二区在线观看| www国产亚洲精品久久网站| 51久久精品夜色国产麻豆| 亚洲护士老师的毛茸茸最新章节| 国产97在线|亚洲| 日韩欧美在线免费| 国产成人极品视频| 日韩亚洲欧美中文高清在线| 欧美激情国产日韩精品一区18| 日韩av三级在线观看| 欧美高清在线视频观看不卡| 欧美日韩亚洲一区二| 97超级碰碰碰久久久| 国模精品视频一区二区三区| 伊人久久免费视频| 国产一区二区三区日韩欧美| 日韩av免费在线看| 成人免费看吃奶视频网站| 欧美色视频日本版| 国产精品露脸自拍| 欧美日韩精品在线观看| 欧美成人网在线| 庆余年2免费日韩剧观看大牛| 欧美高清视频在线| 最近2019年中文视频免费在线观看| 亚洲国产成人爱av在线播放| 日韩欧美成人免费视频| 欧美一区深夜视频| 精品国产一区二区三区久久| 国产精品扒开腿做爽爽爽男男| 欧美日韩性视频在线| 2018中文字幕一区二区三区| 国产精品久久久久久超碰| 日韩av男人的天堂| 成人免费网站在线看| 国产suv精品一区二区| 国产精品无码专区在线观看| 日本久久91av| 国产在线精品播放| 中文字幕日本欧美| 91香蕉亚洲精品| 国产亚洲a∨片在线观看| 一个人看的www久久| 久久综合88中文色鬼| 国产91精品黑色丝袜高跟鞋| 国内精品久久久久影院 日本资源| 亚洲国产中文字幕久久网| 中文字幕亚洲在线| 日韩成人av在线| 日韩中文字幕免费| 欧美激情在线狂野欧美精品| 美女视频黄免费的亚洲男人天堂| 欧美日韩aaaa| 国产日韩精品在线| 亚洲区在线播放| 日韩高清电影免费观看完整| 日韩av网址在线| 欧美视频一区二区三区…| 久久国产精品久久久久久| 狠狠色噜噜狠狠狠狠97| 亚洲综合中文字幕在线观看| 亚洲激情视频在线播放| 狠狠色狠狠色综合日日小说| 国产丝袜一区视频在线观看| 久久久久久久久久久久久久久久久久av| 色播久久人人爽人人爽人人片视av| 亚洲欧美中文日韩在线| 亚洲天堂免费在线| 欧美电影免费在线观看| 伊人久久综合97精品| 一本久久综合亚洲鲁鲁| 国产精品女人久久久久久| 国产精品高潮呻吟视频| 日韩av影院在线观看| 国外成人在线直播| 最新国产精品亚洲| 亚洲精品影视在线观看| 国产精品亚洲网站| 亚洲美女av在线| 欧美激情精品久久久久久大尺度| 欧美在线观看www| 欧美www视频在线观看| 国产日韩中文字幕在线| 国产日韩欧美91| 热久久免费视频精品| 日韩在线中文字| 久久频这里精品99香蕉| 日本成人激情视频| 欧美视频中文在线看| 国产999在线观看| 在线观看欧美成人| 亚洲人高潮女人毛茸茸| 在线看国产精品| 亚洲精品一区在线观看香蕉| 国产精品午夜一区二区欲梦| 激情懂色av一区av二区av| 国产日韩在线亚洲字幕中文| 国产69精品久久久久久| 亚洲欧美福利视频| 欧美日韩美女在线观看| 国产成人一区二区三区| 日韩国产精品视频| 日韩精品在线观看网站| 一区二区三区回区在观看免费视频| 国产91在线播放九色快色| 91精品国产高清| 亚洲嫩模很污视频| 亚洲欧洲免费视频| 亚洲成人激情视频| 成人写真福利网| 亚洲精品动漫久久久久| 在线免费观看羞羞视频一区二区| 日韩精品免费在线视频观看| 亚洲综合精品伊人久久| 日韩精品视频中文在线观看| 91精品视频在线免费观看| 欧美成人性生活| 亚洲自拍小视频免费观看| 高跟丝袜一区二区三区| 亚洲女同精品视频| 红桃av永久久久| 欧美性一区二区三区| 亚洲www永久成人夜色| 国产成人精品在线视频| 97精品视频在线播放| 日韩三级影视基地| 日韩高清人体午夜| 日韩久久精品成人| 中文字幕亚洲一区二区三区| 少妇高潮久久久久久潘金莲| 97在线视频免费看| 欧美激情网友自拍| 亚洲福利视频免费观看| 亚洲aⅴ男人的天堂在线观看| 亚洲视频视频在线| 色狠狠久久aa北条麻妃| 在线播放日韩专区| 一区二区三区国产视频| 992tv成人免费影院| 亚洲女在线观看| 性欧美暴力猛交69hd| 精品视频偷偷看在线观看| 国产精品91免费在线| 国产一区二区三区久久精品| 久久久久久亚洲精品不卡| xxx一区二区| 国产精品视频xxx| 国产日韩精品视频| 久久在线免费视频| 日韩av毛片网| 国产精品久久激情| 日韩欧美视频一区二区三区| 欧美日韩国产在线| 中文字幕av一区二区三区谷原希美| 日韩国产欧美精品在线| 久久人体大胆视频| 久久久久久久久久久亚洲| 大伊人狠狠躁夜夜躁av一区| 国产精品揄拍一区二区| 日韩中文在线视频| 欧美性猛交xxxx富婆弯腰|