集合中常用算法总结
1,沖突鏈表
沖突鏈表主要用于HashMap,HashTable中,內(nèi)部采用數(shù)組保存鏈表,鏈表內(nèi)部是單向鏈接,插入的時候會采用頭部插入法,
插入的鏈表包裹數(shù)據(jù)都是無序的,由于容量的增加,會導(dǎo)致整個數(shù)據(jù)的重新HASH,所以,兩次循環(huán)同一個HASH鏈表,可以得到不同的順序。
內(nèi)部實(shí)現(xiàn)難點(diǎn)是根據(jù)KEY的HASH值獲取Bucket
?
?
2,雙向鏈表
雙向鏈表相對于數(shù)組其在插入上的操作少了,數(shù)組為了更改下標(biāo),需要移動后面所有的數(shù)組,而雙向鏈表只需要更改兩個引用就可以達(dá)到相同的效果,所有插入的效率遠(yuǎn)遠(yuǎn)高于數(shù)組
?
?
3,紅黑樹
JAVA數(shù)組內(nèi)部采用一種近視平衡二叉樹,紅黑樹來實(shí)現(xiàn)。紅黑樹有比絕對平衡樹更高的插入效率,因?yàn)椴恍枰WC絕對的平衡。
紅黑樹是一種近似平衡的二叉查找樹,它能夠確保任何一個節(jié)點(diǎn)的左右子樹的高度差不會超過二者中較低那個的一陪。具體來說,紅黑樹是滿足如下條件的二叉查找樹(binary search tree):
紅黑樹的難點(diǎn)是左旋和右旋
?
?
?
4,循環(huán)數(shù)組
循環(huán)數(shù)組內(nèi)部采用數(shù)組實(shí)現(xiàn),只是增加頭和尾的實(shí)現(xiàn),用來實(shí)現(xiàn)棧和隊(duì)列的機(jī)制。其內(nèi)部實(shí)現(xiàn)效率高于雙向鏈表實(shí)現(xiàn)的棧和隊(duì)列。
?
轉(zhuǎn)載于:https://www.cnblogs.com/yeyouya/p/6735212.html
總結(jié)
- 上一篇: 从C++Primer某习题出发,谈谈C语
- 下一篇: document对象相关信息