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