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

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

hashmap源碼解析

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

-----------------------------------------------------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
中文亚洲视频在线| 欧美色视频日本高清在线观看| 国产精品人人做人人爽| 日韩av免费在线看| 亚洲影视中文字幕| 91久久在线观看| 久久精品美女视频网站| 国产日韩欧美在线视频观看| 日韩免费不卡av| 国产成人97精品免费看片| 日韩亚洲欧美中文高清在线| 国产精品永久免费视频| 97国产精品免费视频| 国产成人综合av| 国产成人一区二区在线| 97视频免费在线看| 国语自产精品视频在免费| 欧美日韩国产一区在线| 欧美视频裸体精品| 91大神福利视频在线| 成人中文字幕+乱码+中文字幕| 亚洲一区国产精品| 中文字幕亚洲欧美日韩在线不卡| 亚洲区中文字幕| 欧美日韩国产综合视频在线观看中文| 久久精品久久久久久国产 免费| 久久韩剧网电视剧| 亚洲午夜精品久久久久久性色| 久久国内精品一国内精品| 欧美电影免费观看高清完整| 国模私拍一区二区三区| 人体精品一二三区| 超碰97人人做人人爱少妇| 亚洲色图50p| 成人国产精品久久久久久亚洲| 最近2019中文字幕mv免费看| 国产精品亚洲精品| 91sao在线观看国产| 国产欧美精品一区二区三区-老狼| 久久成人在线视频| 亚洲欧美999| 激情成人在线视频| 久久久亚洲影院| 成人在线激情视频| 国产亚洲欧美日韩一区二区| 亚洲无线码在线一区观看| 欧美另类69精品久久久久9999| 成人妇女免费播放久久久| 欧美日韩午夜视频在线观看| 国产精品第1页| 欧美激情一区二区三区久久久| 色www亚洲国产张柏芝| 国产精品亚洲аv天堂网| 国产美女高潮久久白浆| 一区二区三区四区视频| 91国产在线精品| 久久久久一本一区二区青青蜜月| 久久久精品在线| 久久夜精品va视频免费观看| 中文字幕日韩欧美在线视频| 亚洲第一视频在线观看| 97超视频免费观看| 国产精品欧美在线| 2019中文在线观看| 国产精品69久久久久| 欧美人成在线视频| 69久久夜色精品国产7777| 亚洲人成电影网站| 国产精品欧美风情| 亚洲天堂av网| 欧美在线观看一区二区三区| 午夜精品一区二区三区在线| 日韩国产中文字幕| 在线精品91av| 亚洲日韩欧美视频| 欧美综合一区第一页| 91精品国产91久久久久久| 亚洲一区二区自拍| 中文字幕亚洲欧美在线| 性欧美激情精品| 粉嫩av一区二区三区免费野| 日本久久精品视频| 韩国一区二区电影| 亚洲已满18点击进入在线看片| 麻豆成人在线看| 亚洲第一网站免费视频| 午夜剧场成人观在线视频免费观看| 亚洲国产第一页| 日韩在线观看视频免费| 欧美成人精品在线观看| 亚洲三级黄色在线观看| 九九九久久久久久| 久久综合久中文字幕青草| 欧美一乱一性一交一视频| 亚洲欧美日韩精品久久奇米色影视| 欧美不卡视频一区发布| 亚洲午夜av久久乱码| 欧美精品在线视频观看| 成人激情在线观看| 欧美性猛交xxxx乱大交| 国产精品日韩在线播放| 久久91精品国产| 日韩美女视频中文字幕| 国产精品极品美女粉嫩高清在线| 国产一区二区三区视频免费| 亚洲美女在线视频| 亚洲精品狠狠操| 精品久久久久久久中文字幕| 亚洲va国产va天堂va久久| 夜夜躁日日躁狠狠久久88av| 久久99久久99精品中文字幕| 国内精久久久久久久久久人| 久久久久久久色| 久久中文字幕视频| 北条麻妃99精品青青久久| 国产mv久久久| 国产亚洲欧洲黄色| 538国产精品一区二区在线| 亚洲综合在线做性| 欧美激情一级精品国产| 91热福利电影| 欧美在线性爱视频| 久久精品成人动漫| 国产日韩精品综合网站| 啪一啪鲁一鲁2019在线视频| 国产精品18久久久久久首页狼| 午夜精品免费视频| 国产精品www色诱视频| 久久夜色精品国产亚洲aⅴ| 欧美精品激情blacked18| 亚洲成人教育av| 亚洲综合日韩中文字幕v在线| 日韩欧美在线观看视频| 国产精品久久97| 亚洲女人天堂成人av在线| 国产精品极品美女粉嫩高清在线| 国产999视频| 国产偷亚洲偷欧美偷精品| 日本精品免费一区二区三区| 欧美午夜视频在线观看| 欧美区在线播放| 亚洲a在线观看| 亚洲欧洲在线免费| 欧美高清电影在线看| 久久视频在线视频| 欧美在线精品免播放器视频| 日韩少妇与小伙激情| 成人精品久久av网站| 欧美激情视频播放| 狠狠久久五月精品中文字幕| 亚洲综合一区二区不卡| 亚洲tv在线观看| 成人黄色片网站| 清纯唯美亚洲激情| 国产精品久久久久久久久久久久久| 日韩精品免费在线视频| 成人性生交大片免费看视频直播| 最近更新的2019中文字幕| 国产精品久久久久久久久久东京| 青青青国产精品一区二区| 亚洲欧美日韩精品久久| 在线成人激情黄色| 精品综合久久久久久97| 亚洲精品综合精品自拍|