hashMap hashtable知識點總結

2021-09-11 16:45:10 字數 1731 閱讀 2619

a)  hashmap實際上是乙個「鍊錶雜湊」的資料結構,即陣列和鍊錶的結合體。hashmap的底層結構是乙個陣列,陣列中的每一項是一條鍊錶。

b)  hashmap的例項有倆個引數影響其效能: 「初始容量」 和 裝填因子。

c)  hashmap實現不同步,執行緒不安全。  hashtable執行緒安全

d)  hashmap中的key-value都是儲存在entry中的。

e)  hashmap可以存null鍵和null值,不保證元素的順序恆久不變,它的底層使用的是陣列和鍊錶,通過hashcode()方法和equals方法保證鍵的唯一性

f)  解決衝突主要有三種方法:定址法,拉鍊法,再雜湊法。hashmap是採用拉鍊法解決雜湊衝突的。

注: 鍊錶法是將相同hash值的物件組成乙個鍊錶放在hash值對應的槽位;   

用開放定址法解決衝突的做法是:當衝突發生時,使用某種探查(亦稱探測)技術在雜湊表中形成乙個探查(測)序列。 沿此序列逐個單元地查詢,直到找到給定 的關鍵字,或者碰到乙個開放的位址(即該位址單元為空)為止(若要插入,在探查到開放的位址,則可將待插入的新結點存人該位址單元)。  

拉鍊法解決衝突的做法是: 將所有關鍵字為同義詞的結點鏈結在同乙個單鏈表中 。若選定的雜湊表長度為m,則可將雜湊表定義為乙個由m個頭指標組成的指標數 組t[0..m-1]。凡是雜湊位址為i的結點,均插入到以t[i]為頭指標的單鏈表中。t中各分量的初值均應為空指標。在拉鍊法中,裝填因子α可以大於1,但一般均取α≤1。拉鍊法適合未規定元素的大小。    

a)   繼承不同。  public class hashtable extends dictionary implements map

public class hashmap extends  abstractmap implements map

b)  hashtable中的方法是同步的,而hashmap中的方法在預設情況下是非同步的。在多執行緒併發的環境下,可以直接使用hashtable,但是要使用hashmap的話就要自己增加同步處理了。

c)  hashtable 中, key 和 value 都不允許出現 null 值。 在 hashmap 中, null 可以作為鍵,這樣的鍵只有乙個;可以有乙個或多個鍵所對應的值為 null 。當 get() 方法返回 null 值時,即可以表示 hashmap 中沒有該鍵,也可以表示該鍵所對應的值為 null 。因此,在 hashmap 中不能由 get() 方法來判斷 hashmap 中是否存在某個鍵, 而應該用 containskey() 方法來判斷。

d)  兩個遍歷方式的內部實現上不同。hashtable、hashmap都使用了iterator。而由於歷史原因,hashtable還使用了enumeration的方式 。

e)  雜湊值的使用不同,hashtable直接使用物件的hashcode。而hashmap重新計算hash值。

f)  hashtable和hashmap它們兩個內部實現方式的陣列的初始大小和擴容的方式。hashtable中hash陣列預設大小是11,增加的方式是old*2+1。hashmap中hash陣列的預設大小是16,而且一定是2的指數。  

注:  hashset子類依靠hashcode()和equal()方法來區分重複元素。     

hashset內部使用map儲存資料,即將hashset的資料作為map的key值儲存,這也是hashset中元素不能重複的原因。而map中儲存key值的,會去判斷當前map中是否含有該key物件,內部是先通過key的hashcode,確定有相同的hashcode之後,再通過equals方法判斷是否相同。

Se Map Proxy Symbol知識點總結

se map proxy symbol總結 是es6中新增的乙個資料結構。可以理解為乙個內容不可重複的陣列 初始化 常用方法和屬性 add item 用於向set物件內新增一項 item 被新增的項 注 如果新增的是已經存在的內容 則新增失敗 var set new set 0,1,2,3,set....

Robotframework變數知識點總結

目錄 scarlar變數 變數使用 list變數 變數使用 list 元素的使用 變數轉換 其他變數 變數檔案 一,變數與常量 變數都用表示。變數主要有兩類 scalar類和list類。scalar 類表示為 list類表示為 rf的底層語法是python,所以不需要特別宣告變數,只需要進行初始化賦...

PHP 總給知識點

git clone git github.com yang wen long team.git shop 新增公鑰 一.建立公鑰 ssh keygen 二.初始化 git init 三.開啟配置項 vim git config 四.在專案裡新增使用者 user name yangwenlong em...