Java中的HashSet集合存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)詳解
HashSet集合存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)(哈希表) 哈希表
哈希表
- 在jdk1.8版本之前,哈希表=數(shù)組+鏈表結(jié)構(gòu)
- 在jdk1.8版本之后,值得注意的是。哈希表也=數(shù)組+鏈表,但是呢哈希表還=數(shù)組+紅黑樹(提高查詢的速度)
所以說哈希表的特點(diǎn):查詢速度快
因?yàn)槭且粋€(gè)集合,所以我們先畫一個(gè)容器
數(shù)組結(jié)構(gòu)他把元素進(jìn)行分組,相同哈希值的元素是一組。鏈表/紅黑樹結(jié)構(gòu)把相同哈希值的元素鏈接到一起,存儲(chǔ)數(shù)據(jù)到集合中,先計(jì)算元素的哈希值。
隨后當(dāng)我們儲(chǔ)存時(shí),將哈希值放到數(shù)組中,當(dāng)我們存儲(chǔ)元素時(shí),會(huì)將哈希值相同的元素掛在數(shù)組的下方,形象如下圖:
在上一篇文中,我舉例了兩個(gè)特殊的字符串:重地和通話,這兩個(gè)字符串的哈希值是相同的。這個(gè)我們稱之為哈希沖突(兩個(gè)元素不同,但是兩個(gè)哈希值相同)。
當(dāng)這兩個(gè)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),也是將兩個(gè)元素放在同一個(gè)哈希值下方:
哈希表查詢的速度非???,先把數(shù)據(jù)根據(jù)哈希值相同進(jìn)行分組,數(shù)組查詢速度本來就快,因?yàn)閿?shù)組的地址是連續(xù)的。分組之后我們?cè)诓樵儠r(shí),先計(jì)算哈希值,然后通過哈希值找到所對(duì)應(yīng)的元素。
如果鏈表的長(zhǎng)度超過了8位,那么就會(huì)把鏈表轉(zhuǎn)化為紅黑樹。目的就是提高查詢的速度。
到此這篇關(guān)于Java中的HashSet集合存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)HashSet集合存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java調(diào)用opencv身份證號(hào)識(shí)別詳解
這篇文章主要為大家詳細(xì)介紹了java如何調(diào)用opencv實(shí)現(xiàn)身份證號(hào)的識(shí)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03如何查看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ì),對(duì)大家的學(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(逗號(hào)分隔值)文件是一項(xiàng)常見的任務(wù),本文將利用Apache?Commons?CSV?庫實(shí)現(xiàn)讀取,寫入和操作CSV文件,希望對(duì)大家有所幫助2025-02-02Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問對(duì)象DAO模式的方法
Data Access Object數(shù)據(jù)訪問對(duì)象模式在Java操作數(shù)據(jù)庫部分的程序設(shè)計(jì)中經(jīng)常被使用到,這里我們就來看一下Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問對(duì)象DAO模式的方法:2016-06-06MyBatis實(shí)現(xiàn)注冊(cè)及獲取Mapper
本文主要介紹了MyBatis實(shí)現(xiàn)注冊(cè)及獲取Mapper,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03