Java中的HashSet集合存儲數(shù)據(jù)的結(jié)構(gòu)詳解
HashSet集合存儲數(shù)據(jù)的結(jié)構(gòu)(哈希表) 哈希表
哈希表
- 在jdk1.8版本之前,哈希表=數(shù)組+鏈表結(jié)構(gòu)
- 在jdk1.8版本之后,值得注意的是。哈希表也=數(shù)組+鏈表,但是呢哈希表還=數(shù)組+紅黑樹(提高查詢的速度)
所以說哈希表的特點:查詢速度快
因為是一個集合,所以我們先畫一個容器
數(shù)組結(jié)構(gòu)他把元素進行分組,相同哈希值的元素是一組。鏈表/紅黑樹結(jié)構(gòu)把相同哈希值的元素鏈接到一起,存儲數(shù)據(jù)到集合中,先計算元素的哈希值。
隨后當我們儲存時,將哈希值放到數(shù)組中,當我們存儲元素時,會將哈希值相同的元素掛在數(shù)組的下方,形象如下圖:
在上一篇文中,我舉例了兩個特殊的字符串:重地和通話,這兩個字符串的哈希值是相同的。這個我們稱之為哈希沖突(兩個元素不同,但是兩個哈希值相同)。
當這兩個數(shù)據(jù)進行存儲時,也是將兩個元素放在同一個哈希值下方:
哈希表查詢的速度非???,先把數(shù)據(jù)根據(jù)哈希值相同進行分組,數(shù)組查詢速度本來就快,因為數(shù)組的地址是連續(xù)的。分組之后我們在查詢時,先計算哈希值,然后通過哈希值找到所對應(yīng)的元素。
如果鏈表的長度超過了8位,那么就會把鏈表轉(zhuǎn)化為紅黑樹。目的就是提高查詢的速度。
到此這篇關(guān)于Java中的HashSet集合存儲數(shù)據(jù)的結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)HashSet集合存儲數(shù)據(jù)的結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何基于ThreadPoolExecutor創(chuàng)建線程池并操作
這篇文章主要介紹了如何基于ThreadPoolExecutor創(chuàng)建線程池并操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11Java并發(fā)編程中的CyclicBarrier使用解析
這篇文章主要介紹了Java并發(fā)編程中的CyclicBarrier使用解析,CyclicBarrier從字面意思上來看,循環(huán)柵欄,這篇文章就來分析下是到底是如何實現(xiàn)循環(huán)和柵欄的,需要的朋友可以參考下2023-12-12一文詳解Java如何使用commons-csv搞定CSV文件操作
在?Java?開發(fā)中,處理?CSV(逗號分隔值)文件是一項常見的任務(wù),本文將利用Apache?Commons?CSV?庫實現(xiàn)讀取,寫入和操作CSV文件,希望對大家有所幫助2025-02-02Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問對象DAO模式的方法
Data Access Object數(shù)據(jù)訪問對象模式在Java操作數(shù)據(jù)庫部分的程序設(shè)計中經(jīng)常被使用到,這里我們就來看一下Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問對象DAO模式的方法:2016-06-06