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

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

JVM里面hashtable和hashmap實現原理

2019-11-14 15:24:49
字體:
來源:轉載
供稿:網友

JVM里面hashtable和hashmap實現原理

 
文章分類:java編程

轉載

 

在hashtable和hashmap是java里面常見的容器類,

是Java.uitl包下面的類,

那么Hashtable和Hashmap是怎么實現hash鍵值對配對的呢,我們看看jdk里面的源碼,分析下Hashtable的構造方法,put(K, V)加入方法和get(Object)方法就大概明白了。

一、Hashtable的構造方法:Hashtable(int initialCapacity, float loadFactor)

    public Hashtable(int initialCapacity, float loadFactor) {
 if (initialCapacity < 0)
     throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        if (loadFactor <= 0 || Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal Load: "+loadFactor);

        if (initialCapacity==0)
            initialCapacity = 1;
 this.loadFactor = loadFactor;
 table = new Entry[initialCapacity];
 threshold = (int)(initialCapacity * loadFactor);
    }

這個里面米內有什么好說的,要注意的是table一個是實體數組,輸入的initialCapacity表示這個數組的大小,而threshold 是一個int值,其中loadFactor默認是0.75,就是說明,當table里面的值到75%的閥值后,快要填滿數組了,就會自動雙倍擴大數字容 量。

   而Entry<K,V> 來自與

PRivate static class Entry<K,V> implements Map.Entry<K,V> {
            int hash;
            K key;
            V value;
            Entry<K,V> next;
是一個單項鏈表,

上圖就是Hashtable的表,

二、put(K, V)加入方法

    public synchronized V put(K key, V value) {
 // Make sure the value is not null
 if (value == null) {
     throw new NullPointerException();
 }

 // Makes sure the key is not already in the hashtable.
 Entry tab[] = table;
 int hash = key.hashCode();
 int index = (hash & 0x7FFFFFFF) % tab.length;
 for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
     if ((e.hash == hash) && e.key.equals(key)) {
  V ld = e.value;
  e.value = value;
  return old;
     }
 }

 modCount++;
 if (count >= threshold) {
     // Rehash the table if the threshold is exceeded
     rehash();

            tab = table;
            index = (hash & 0x7FFFFFFF) % tab.length;
 }

 // Creates the new entry.
 Entry<K,V> e = tab[index];
 tab[index] = new Entry<K,V>(hash, key, value, e);
 count++;
 return null;
    }

這個看看起來很長,只要注意三點就可以了,

1.index,index是鍵值的hashcode和0x7FFFFFFF的&運算,然后根據數組長度求余值。這樣可以定出所在隊列名稱,

2、

 for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
     if ((e.hash == hash) && e.key.equals(key)) {
  V ld = e.value;
  e.value = value;
  return old;
     }
 }

for語句里面是讓e在tab某個隊列名為index單項鏈表里面遍歷,第幾個單項鏈表的定義由index定義,看看該隊列是否已經有同樣的值,如果有,就返回該值。

3、如果沒有,則加入

 Entry<K,V> e = tab[index];
 tab[index] = new Entry<K,V>(hash, key, value, e);

三、get(Object),獲得

    public synchronized V get(Object key) {
 Entry tab[] = table;
 int hash = key.hashCode();
 int index = (hash & 0x7FFFFFFF) % tab.length;
 for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
     if ((e.hash == hash) && e.key.equals(key)) {
  return e.value;
     }
 }
 return null;
    }

這個就很好理解了 int index = (hash & 0x7FFFFFFF) % tab.length;

獲得隊列名稱,

 for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
     if ((e.hash == hash) && e.key.equals(key)) {
  return e.value;
     }
 }

在該隊里面遍歷,根據hash值獲得具體值。

 

總結下,一個是根據index確定隊列,在由hash值獲得具體元素值。

 

看完了hashtable, 我們在來看看hashMap
hashMap可以算作是hashtable的升級版本, 最早從1.2開始有的. 

但是, 兩者之間最主要的不同有兩點.
1.     hashMap的讀寫是unsynchronized, 在多線程的環境中要注意使用
而hashtable是synchronized
這兩者的不同是通過在讀寫方法上加synchronized關鍵字來實現的.

第二個不同是hashMap可以放空值, 而hashtable就會報錯.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成年人影院在线| 亚洲精品国产综合久久| 一色桃子一区二区| 亚洲另类xxxx| 精品日韩美女的视频高清| 欧美中文字幕在线播放| 久久免费在线观看| 色噜噜狠狠狠综合曰曰曰| 国产97在线播放| 国产一区二区三区在线免费观看| 国产精品视频白浆免费视频| 91性高湖久久久久久久久_久久99| www.久久久久久.com| 日韩中文字幕网| 91国偷自产一区二区三区的观看方式| 亚洲电影免费观看高清完整版| 久热精品视频在线观看| 亚洲国产美女久久久久| 欧美电影免费观看高清完整| 国产亚洲欧美日韩一区二区| 亚洲人成伊人成综合网久久久| 青青草国产精品一区二区| 久操成人在线视频| 亚洲欧美一区二区激情| 欧美激情在线播放| 在线观看国产精品淫| 亚洲第一精品夜夜躁人人爽| 久久久精品久久| 色七七影院综合| 亚洲成人精品久久久| 不卡av电影院| 97久久超碰福利国产精品…| 日韩成人中文字幕| 日韩欧美一区二区三区久久| 啊v视频在线一区二区三区| 伦伦影院午夜日韩欧美限制| 中文字幕日韩免费视频| 国产精品国产三级国产aⅴ9色| 欧美中文字幕在线播放| 2023亚洲男人天堂| 91在线观看免费高清完整版在线观看| 亚洲女同精品视频| 国产91成人video| 日韩电视剧在线观看免费网站| 日韩中文字幕视频在线观看| 精品国产区一区二区三区在线观看| 色久欧美在线视频观看| 日韩免费中文字幕| 91在线视频导航| 国产精品白嫩美女在线观看| 91精品久久久久久久久青青| 久久久亚洲影院你懂的| 久久99国产精品自在自在app| 国产精品视频久久| 久久久亚洲影院| 午夜精品国产精品大乳美女| 欧美日韩免费在线观看| 亚洲一区二区免费| 久久免费视频在线| 久久久影视精品| 日韩欧美国产视频| 亚洲自拍偷拍网址| 日韩中文字幕久久| 国产精品入口尤物| 亚洲自拍偷拍区| 亚洲自拍偷拍色图| 亚洲电影av在线| 中文字幕精品久久久久| 91欧美视频网站| 国产日本欧美一区| 97超碰蝌蚪网人人做人人爽| 国产精品香蕉国产| 国产欧美久久一区二区| 国产精品99蜜臀久久不卡二区| 成人精品一区二区三区电影黑人| 亚洲人高潮女人毛茸茸| 国产精品久久久一区| 国产一区视频在线| 大量国产精品视频| 欧美专区福利在线| 国产欧美精品va在线观看| 亚洲欧美在线第一页| 国产成人精品免费视频| 成人福利视频网| 欧美激情影音先锋| 欧美激情亚洲激情| 欧美性猛交xxxx乱大交极品| 国产日韩欧美在线观看| 91久久精品国产91久久| 国产91对白在线播放| 日韩中文字幕第一页| 免费99精品国产自在在线| 久久视频中文字幕| 欧美怡春院一区二区三区| 久久久久久久色| 国产日韩欧美91| 欧美日韩亚洲系列| 国产日产亚洲精品| 最近2019年日本中文免费字幕| 欧美区二区三区| 亚洲aⅴ男人的天堂在线观看| 精品久久久久久久久久| 国产一区二区三区在线看| 欧美一级大胆视频| 一区二区亚洲欧洲国产日韩| 97久久超碰福利国产精品…| 国产精品国产福利国产秒拍| 欧美高清一级大片| 精品少妇v888av| 国产日韩综合一区二区性色av| 亚洲精品美女视频| 久久久999国产精品| www.欧美精品| 亚洲国产日韩欧美综合久久| 一区二区三区国产视频| 亚洲视频国产视频| 国产精品一区二区在线| 国产精品99蜜臀久久不卡二区| 国产成人精品免高潮在线观看| 98精品在线视频| 精品久久久久久国产91| 欧美国产一区二区三区| 亚洲人成五月天| 欧美黑人又粗大| 亚洲福利在线视频| 日韩资源在线观看| 久久亚洲一区二区三区四区五区高| 成人黄色生活片| 亚洲国产日韩欧美在线动漫| 欧美一级大胆视频| 亚洲综合第一页| 国产欧美日韩91| 精品国产成人av| 欧美日本高清一区| 亚洲成人教育av| 亚洲欧洲美洲在线综合| 亚洲色在线视频| 久久久久久成人| 国产一区二区三区久久精品| 91精品国产91久久久久久| 日本精品视频在线| 777午夜精品福利在线观看| 久久久久国产视频| 欧美另类高清videos| 91社区国产高清| 国产欧美日韩中文字幕| 日韩欧美在线中文字幕| 亚洲精品乱码久久久久久按摩观| 欧美精品在线极品| 欧美电影免费观看电视剧大全| 亚洲欧美日韩成人| 日韩国产欧美精品在线| 亚洲欧美激情另类校园| 亚洲成人黄色网址| 麻豆一区二区在线观看| 国模吧一区二区| 日韩精品中文字幕在线观看| 中文字幕精品影院| 亚洲国产精品va在线观看黑人| 国产精品户外野外| 国模精品系列视频| 国产美女被下药99| 国产区精品在线观看| 日本欧美精品在线|