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

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

hashmap源碼解析

2019-11-11 06:01:01
字體:
來源:轉載
供稿:網友

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www国产亚洲精品久久网站| 国产精品69久久| 黑人精品xxx一区一二区| 久久黄色av网站| 萌白酱国产一区二区| 欧美最猛性xxxxx(亚洲精品)| 国产成人av在线| 欧美成人精品h版在线观看| 欧美巨乳在线观看| 国产91在线播放九色快色| 亚洲淫片在线视频| 亚洲天堂av网| 深夜福利日韩在线看| 在线观看亚洲区| 久久免费少妇高潮久久精品99| 久久精品国亚洲| 国产精品第一区| 韩国精品美女www爽爽爽视频| 精品国产美女在线| 国产成人综合亚洲| 欧美怡红院视频一区二区三区| 91精品国产自产在线老师啪| 亚洲品质视频自拍网| 色婷婷av一区二区三区在线观看| 久久精品精品电影网| 欧美亚洲视频一区二区| 97视频色精品| 97视频在线免费观看| 国内精品一区二区三区四区| 中文字幕亚洲欧美日韩在线不卡| 欧洲精品毛片网站| 66m—66摸成人免费视频| 一本色道久久综合狠狠躁篇的优点| 欧美成人精品三级在线观看| 蜜臀久久99精品久久久无需会员| 神马久久久久久| 日韩电影大全免费观看2023年上| 成人黄色网免费| 91成人国产在线观看| 国产精品h在线观看| 亚洲精品久久久久久久久久久久| 欧美综合国产精品久久丁香| 91精品国产91久久久久久最新| 国产亚洲激情在线| xxxx欧美18另类的高清| 日韩一区在线视频| 国产精品专区h在线观看| 在线播放国产一区中文字幕剧情欧美| 国产欧美日韩91| 亚洲人成网站999久久久综合| 欧美做受高潮1| 亚洲国产精品推荐| 午夜伦理精品一区| 国产精品永久免费| 精品视频久久久久久| 久久综合久久88| 中文字幕亚洲专区| 92国产精品久久久久首页| 一区二区三区在线播放欧美| 久久综合久久88| 欧美洲成人男女午夜视频| 日韩欧美大尺度| 欧美性xxxxx极品娇小| 青青草精品毛片| 国产欧美日韩高清| 亚洲成人久久电影| 日韩成人在线免费观看| 欧美精品生活片| 午夜精品一区二区三区视频免费看| 尤物yw午夜国产精品视频明星| 亚洲在线www| 亚洲电影第1页| 美女黄色丝袜一区| 91色精品视频在线| 美女av一区二区三区| 日韩精品高清视频| 国产精品网站视频| 亚洲欧美日韩一区二区三区在线| 亚洲成人久久电影| 国产精品亚洲欧美导航| 青草热久免费精品视频| 久久久亚洲福利精品午夜| 久久久久久12| 成人羞羞国产免费| 97久久精品国产| 久久夜色撩人精品| 国产精品久久久久久影视| 亚洲国产成人精品女人久久久| 成人中心免费视频| 91精品国产色综合久久不卡98| 精品久久久久久国产| 欧美激情视频三区| 中文字幕精品久久久久| 在线电影av不卡网址| 97成人超碰免| 日韩亚洲国产中文字幕| 国产精品久久久久久久电影| 亚洲伦理中文字幕| 欧美成人精品一区| 91中文字幕一区| xvideos国产精品| 国产精品va在线播放我和闺蜜| 91视频国产精品| 国产精品成人va在线观看| 欧美黑人性生活视频| 国产做受69高潮| 成人免费视频a| 欧美自拍视频在线观看| 国内精品久久久久久| 欧美专区福利在线| 久久777国产线看观看精品| 91免费的视频在线播放| 亚洲午夜色婷婷在线| 韩日欧美一区二区| 日韩中文在线不卡| 久久久精品国产网站| 欧美日韩在线另类| 亚洲成人a**站| 欧美激情影音先锋| 久久精品色欧美aⅴ一区二区| 欧美日韩视频免费播放| 国产91对白在线播放| 国产在线视频不卡| 亚洲美女精品久久| 日韩精品中文在线观看| 久久男人资源视频| 欧美理论电影在线播放| 高清日韩电视剧大全免费播放在线观看| 亚洲乱码av中文一区二区| 日韩中文字幕精品视频| 国产精品av在线播放| 欧美高清视频在线播放| 日韩成人性视频| 亚洲福利精品在线| 久久久精品国产| 久久在精品线影院精品国产| 欧美成人午夜免费视在线看片| 欧美精品videossex88| 精品美女久久久久久免费| 一区二区三区美女xx视频| 欧美成人精品不卡视频在线观看| 欧美日韩中文字幕在线视频| 国产精品扒开腿做爽爽爽男男| 久久久精品一区二区| 国产黑人绿帽在线第一区| 91久久久久久久久久| 色婷婷综合成人| 日韩在线观看免费高清完整版| 欧美一区二区三区精品电影| 欧美情侣性视频| 亚洲国产欧美一区| 亚洲男人天堂九九视频| 亚洲理论在线a中文字幕| 国产精品影院在线观看| 亲爱的老师9免费观看全集电视剧| 黑人极品videos精品欧美裸| 日韩在线精品视频| 欧美专区在线观看| 日韩一区二区三区在线播放| 91国产一区在线| 懂色av影视一区二区三区| 欧美成人在线免费视频| 久久国产视频网站| 成人免费xxxxx在线观看|