數組佔據隨機訪問的優點,卻有須要連續內存的缺點。算法
鏈表具備可不連續存儲的優點,但訪問查找是線性的。數組
散列表和鏈表、跳錶的混合使用,是爲告終合數組和鏈表的優點,規避它們的不足。緩存
咱們能夠得出數據結構和算法的重要性排行榜:連續空間 > 時間 > 碎片空間。數據結構
所以散列表和鏈表會一塊兒來使用。數據結構和算法
LRU緩存淘汰算法優化
以前用鏈表實現,它的時間複雜度是O(n)。 利用散列表和鏈表能夠優化到O(1)。指針
hnext指針是爲了鏈接散列表中的衝突鏈表; prev和next指針是雙向鏈表的前繼和後繼指針。cdn
這樣在查詢、插入、刪除操做的時間複雜度都是O(1)。對象
Redis有序集合blog
對學生(id、name、score)對象數據集合進行一下操做:
這時就能夠結合散列表、雙向鏈表、跳錶來實現。 使用雙向鏈表對學生對象以score進行排序,結合跳錶。在使用id做爲key實現散列表。
iOS YYMemoryCache 利用散列表和雙向鏈表實現內存緩存。 散列表的實現:直接使用系統提供CFMutableDictionaryRef