HashMap內部是如何實現的?
HashMap內部是如何實現的?
HashMap并不保證映射的順序,特別是該順序不會恒久不變。哈希函數會將元素適當地分布在各桶之間,為基本操作(get和put)提供穩定的性能。迭代collection視圖所需的時間與HashMap實例的容量(桶的數量)和大小(鍵-值映射關系數)成比例。HashMap有兩個參數影響其性能:初始容量和加載因子。容量是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。加載因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行rehash操作,即重建內部數據結構,從而哈希表將具有大約兩倍的桶數。
導讀HashMap并不保證映射的順序,特別是該順序不會恒久不變。哈希函數會將元素適當地分布在各桶之間,為基本操作(get和put)提供穩定的性能。迭代collection視圖所需的時間與HashMap實例的容量(桶的數量)和大小(鍵-值映射關系數)成比例。HashMap有兩個參數影響其性能:初始容量和加載因子。容量是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。加載因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行rehash操作,即重建內部數據結構,從而哈希表將具有大約兩倍的桶數。
HashMap是一種基于哈希表的Map接口實現,它提供了所有可選映射操作,并允許使用null值和null鍵。除了非同步和允許使用null之外,HashMap與Hashtable非常相似。HashMap并不保證映射的順序,特別是該順序不會恒久不變。哈希函數會將元素適當地分布在各桶之間,為基本操作(get和put)提供穩定的性能。迭代collection視圖所需的時間與HashMap實例的容量(桶的數量)和大小(鍵-值映射關系數)成比例。HashMap有兩個參數影響其性能:初始容量和加載因子。容量是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。加載因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行rehash操作,即重建內部數據結構,從而哈希表將具有大約兩倍的桶數。默認加載因子為0.75,在時間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,但同時也增加了查詢成本。在設置初始容量時應該考慮到映射中所需的條目數及其加載因子,以便最大限度地減少rehash操作次數。如果很多映射關系要存儲在HashMap實例中,則相對于按需執行自動的rehash操作以增大表的容量來說,使用足夠大的初始容量創建它將使得映射關系能更有效地存儲。HashMap不是同步的。如果多個線程同時訪問一個哈希映射,而其中至少一個線程從結構上修改了該映射,則需要保持外部同步。由所有此類的“collection視圖方法”所返回的迭代器都是快速失敗的:在迭代器創建之后,如果從結構上對映射進行修改,除非通過迭代器本身的remove方法,其他任何時間任何方式的修改,迭代器都將拋出ConcurrentModificationException。
HashMap內部是如何實現的?
HashMap并不保證映射的順序,特別是該順序不會恒久不變。哈希函數會將元素適當地分布在各桶之間,為基本操作(get和put)提供穩定的性能。迭代collection視圖所需的時間與HashMap實例的容量(桶的數量)和大小(鍵-值映射關系數)成比例。HashMap有兩個參數影響其性能:初始容量和加載因子。容量是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。加載因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度。當哈希表中的條目數超出了加載因子與當前容量的乘積時,則要對該哈希表進行rehash操作,即重建內部數據結構,從而哈希表將具有大約兩倍的桶數。
為你推薦