JAVA hashtable常用方法和原始碼分析

2021-09-02 17:38:05 字數 2904 閱讀 3369

public  static void main(string args) 

* public synchronized v put(k key, v value)

* entry<?,?> tab = table;

* int hash = key.hashcode();//計算雜湊值,此處說明value值不能為null,否則會出現空指標異常

* int index = (hash & 0x7fffffff) % tab.length;//計算位置

* entryentry = (entry)tab[index];

* for(; entry != null ; entry = entry.next)

* }

** addentry(hash, key, value, index);//存在擴容機制

* return null;

* }

* //新增元素addentry

* private void addentry(int hash, k key, v value, int index)

* entrye = (entry) tab[index];

* tab[index] = new entry<>(hash, key, value, e);

* count++;

* }

* 重雜湊

* protected void rehash()

* entry<?,?> newmap = new entry<?,?>[newcapacity];

** modcount++;

* //重新計算閾值:新的容量*載入因子和最大值+1中最小的值,閾值的作用顯然實在新增元素是判斷是否擴容陣列發揮作用

* threshold = (int)math.min(newcapacity * loadfactor, max_array_size + 1);

* table = newmap;

* //將舊的元素通過for迴圈放入新的陣列

* for (int i = oldcapacity ; i-- > 0 ;)

* }

* }

* **/

hashtable.remove("ls");

/*** 刪除元素:

* 1.計算雜湊值

* 2.通過雜湊值找位置

* 3.通過位置找節點,遍歷整個鍊錶,如果存在,根據鍊錶的刪除元素的方法刪除即可,

* 最後需要將value值賦值為null,避免記憶體洩漏

* *

* public synchronized v remove(object key) else

* count--;

* v oldvalue = e.value;

* e.value = null;

* return oldvalue;

* }

* }

* return null;

* }**/

integer ls = hashtable.get("ls");

/*** 通過鍵獲取元素,也是:

* 1.計算雜湊值

* 2.通過雜湊函式計算位置

* 3.遍歷查詢,返回value

* public synchronized v get(object key)

* }

* return null;

* }**/

hashtable.contains("ls");

/***

* public synchronized boolean contains(object value)

* entry<?,?> tab = table;

* for (int i = tab.length ; i-- > 0 ;)

* }

* }

* return false;

* }

*//**

* * 遍歷方式有四種,如下

*///使用列舉的方法遍歷

enumerationelements = hashtable.elements();

while (elements.hasmoreelements())

//節點的方式遍歷

set> entries = hashtable.entryset();

iterator> iterator = entries.iterator();

while (iterator.hasnext())

//key遍歷

setstrings = hashtable.keyset();

iteratoriterator1 = strings.iterator();

while (iterator1.hasnext())

//value值遍歷

collectionvalues = hashtable.values();

iteratoriterator2 = values.iterator();

while (iterator2.hasnext())

}

Java Hashtable 原始碼簡要分析

hashtable比較早,是執行緒安全的雜湊對映表。內部採用entry陣列,每個entry均可作為鍊錶的頭,用來解決衝突 碰撞 hashmap與hashtable基本原理一樣,只是hashmap允許null的key value,且非執行緒安全。linkedhashmap從字面看有兩個意思,hash和...

easyui常用控制項常用方法

easyui常用控制項使用方法 1.文字框 取值 id textbox getvalue 或 id val 2.鏈結按鈕 register 3.日曆控制項 顯示年月日 取值 kssj datebox getvalue 顯示年月日時分秒 取值 regtime datetimebox getvalue ...

常用指令碼 常用指令碼整理

1 addloadevent 網頁載入完成後把多個自己編寫的函式繫結到window.onload事件中 把現有的window.onload事件處理函式的值存入便令oldonload。如果在這個處理函式上還沒有繫結任何函式,就像平時那樣把新函式新增給它。如果在這個處理函式上已經繫結了一些函式,就把新函...