国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在C#中實現LRU緩存,你學會了嗎?

開發 前端
LRUCache?類通過結合字典和雙向鏈表高效管理固定大小的緩存,實現了Get和Put操作的O(1)時間復雜度,適用于高性能應用程序。

引言

LRU(比較少用)緩存是一種數據結構,它存儲有限數量的項目,并在緩存達到容量限制時優先移除最近最少使用的項目。本文介紹了如何在C#中使用字典和雙向鏈表相結合實現LRU緩存。

實現細節

LRUCache類使用字典來實現Get和Put操作的O(1)時間復雜度,并使用雙向鏈表來維護緩存項的使用順序。

以下是實現LRU緩存的兩種方法:

手動雙向鏈表

在LRU緩存中,手動雙向鏈表用于維護緩存項的使用順序。當通過Get方法訪問某個項目或通過Put方法添加/更新項目時,該項目會被移動到鏈表的末尾。這確保了最近使用的項目始終位于鏈表末尾,最近最少使用的項目位于鏈表開頭,當需要移除項目時,首先移除這些項目。

public class LRUCache
{
    int Capacity;
    IDictionary<int, LRUNode> keyValuePairs;
    LRUNode head;
    LRUNode tail;

    public LRUCache(int capacity)
    {
        Capacity = capacity;
        keyValuePairs = new Dictionary<int, LRUNode>();
        head = new LRUNode(0, 0);
        tail = new LRUNode(0, 0);
        head.next = tail;
        tail.prev = head;
    }

    private void MoveToTail(LRUNode node)
    {
        RemoveNode(node);
        AddToTail(node);
    }

    private void RemoveNode(LRUNode node)
    {
        node.next.prev = node.prev;
        node.prev.next = node.next;
    }

    private void AddToTail(LRUNode node)
    {
        node.next = tail;
        node.prev = tail.prev;
        tail.prev.next = node;
        tail.prev = node;
    }

    public int Get(int key)
    {
        if (keyValuePairs.TryGetValue(key, out LRUNode node))
        {
            MoveToTail(node);
            return node.value;
        }
        return -1;
    }

    public void Put(int key, int value)
    {
        if (!keyValuePairs.TryGetValue(key, out LRUNode node))
        {
            if (keyValuePairs.Count == Capacity)
            {
                LRUNode lru = head.next;
                RemoveNode(lru);
                keyValuePairs.Remove(lru.key);
            }
            LRUNode newNode = new LRUNode(key, value);
            keyValuePairs[key] = newNode;
            AddToTail(newNode);
        }
        else
        {
            node.value = value;
            MoveToTail(node);
        }
    }
}

public class LRUNode
{
    public int key;
    public int value;
    public LRUNode prev;
    public LRUNode next;

    public LRUNode(int key, int value)
    {
        this.key = key;
        this.value = value;
    }
}

手動雙向鏈表是實現LRU緩存的一種強大技術,它提供了高效、可控的緩存項管理。通過手動處理節點及其連接,此方法可確保緩存操作的最佳性能,適用于需要緩存的高性能應用程序。

C#中的內置鏈表

LRUCacheDLL類使用字典和內置的雙向鏈表來實現LRU緩存。這種方法確保Get和Put操作的時間復雜度為O(1)。

類成員

  • capacity:定義緩存最多能存儲的項目數量。
  • keyValuePairs:一個字典,將鍵映射到鏈表中的對應節點,允許O(1)時間復雜度的節點訪問。
  • dll:一個雙向鏈表,維護緩存項的使用順序。最近使用的項目位于鏈表末尾,最近最少使用的項目位于鏈表開頭。

構造函數

public LRUCacheDLL(int capacity)
{
    this.capacity = capacity;
    keyValuePairs = new Dictionary<int, LinkedListNode<(int key, int value)>>();
    dll = new LinkedList<(int key, int value)>();
}

Get方法

public int Get(int key)
{
    if (keyValuePairs.TryGetValue(key, out LinkedListNode<(int key, int value)> node))
    {
        dll.Remove(node);
        dll.AddLast(node);
        return node.Value.value;
    }
    return -1;
}

Put方法

public void Put(int key, int value)
{
    if (keyValuePairs.TryGetValue(key, out LinkedListNode<(int key, int value)> node))
    {
        dll.Remove(node);
        node.Value = (key, value);
        dll.AddLast(node);
    }
    else
    {
        if (keyValuePairs.Count == capacity)
        {
            keyValuePairs.Remove(dll.First.Value.key);
            dll.RemoveFirst();
        }
        keyValuePairs[key] = dll.AddLast((key, value));
    }
}

LRUCacheDLL類通過結合字典和雙向鏈表高效管理固定大小的緩存。這種實現確保Get和Put操作的時間復雜度為O(1),非常適合高性能應用。

時間復雜度

  • Get操作:O(1)
  • Put操作:O(1)

空間復雜度

  • O(n),其中n是緩存的容量。

使用示例

LRUCache cache = new LRUCache(2);

cache.Put(1, 1);
cache.Put(2, 2);
Console.WriteLine("Get key 1: " + cache.Get(1));
cache.Put(3, 3);
Console.WriteLine("Get key 2: " + cache.Get(2));
cache.Put(4, 4);
Console.WriteLine("Get key 1: " + cache.Get(1));
Console.WriteLine("Get key 3: " + cache.Get(3));
Console.WriteLine("Get key 4: " + cache.Get(4));

輸出

圖片圖片

在此示例中,緩存初始化為容量2,存儲鍵值對,并在超過容量時移除最近最少使用的項目。

結語

LRUCache類通過結合字典和雙向鏈表高效管理固定大小的緩存,實現了Get和Put操作的O(1)時間復雜度,適用于高性能應用程序。

譯文地址:c-sharpcorner.com/article/implementing-an-lru-cache-in-c-sharp/

作者:Rajiv Singh

責任編輯:武曉燕 來源: DotNet開發跳槽
相關推薦

2024-12-31 00:08:37

C#語言dynamic?

2024-09-10 10:34:48

2024-11-06 11:38:59

C#單例模式

2024-12-23 10:06:45

C#深拷貝技術

2024-12-05 08:31:10

2024-10-21 07:05:14

C#特性語言

2024-05-07 07:58:47

C#程序類型

2024-05-17 08:42:52

AttributeMyClass方法

2022-06-16 07:50:35

數據結構鏈表

2024-12-12 08:50:30

開源多媒體框架

2024-07-29 10:35:44

KubernetesCSI存儲

2024-07-03 08:15:39

C#字符串表達式

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構

2023-07-26 13:11:21

ChatGPT平臺工具

2024-02-04 00:00:00

Effect數據組件

2022-11-11 08:29:24

C語言中文字符代碼

2025-01-09 07:58:42

C#API函數

2024-11-28 09:59:35

2025-09-03 04:11:00

點贊
收藏

51CTO技術棧公眾號

亚洲欧美成人精品| 欧美在线影院在线视频| 男人天堂成人在线| 日韩一级精品| 在线观看国产成人av片| 福利小视频在线观看| 不卡免费追剧大全电视剧网站| 精品美女一区二区| 欧美一区自拍| 中文字幕日韩在线观看| 欧美优质美女网站| 午夜免费福利在线| 国产乱码字幕精品高清av| 96久久精品| 青青一区二区| 欧美成人全部免费| 神马电影网我不卡| 日韩亚洲欧美在线观看| 探花国产精品| 91丨国产丨九色丨pron| 久久免费视频2| 丝袜亚洲精品中文字幕一区| 亚洲自拍av在线| 日韩中文在线电影| 国产成人黄色av| 日韩av资源网| 欧美剧在线观看| 免费一级欧美在线观看视频| 日韩成人在线视频| 成人影院在线看| 欧美美女bb生活片| 69av亚洲| 欧美人动与zoxxxx乱| 国产一级网站视频在线| 午夜亚洲国产au精品一区二区| 国产黄视频网站| 国产精品欧美极品| 四虎4hu新地址入口2023| 国产精品欧美综合在线| 成年人在线观看视频免费| 91麻豆精东视频| 国产精品久久中文字幕| av动漫一区二区| 国产极品在线视频| eeuss影院一区二区三区| 青青在线免费视频| 成人h精品动漫一区二区三区| 菠萝蜜视频在线观看入口| 国产高清成人在线| 91免费国产精品| 91色porny蝌蚪| 国产一伦一伦一伦| 亚洲精品综合在线| 亚洲成人男人天堂| 欧美日韩中文精品| 国产在线xxx| 色吧影院999| 卡通动漫国产精品| 成人国产亚洲精品a区天堂华泰| 欧美91视频| 翔田千里亚洲一二三区| 国产不卡视频一区二区三区| 久久精品国产精品亚洲色婷婷| 国产人成一区二区三区影院| 美女少妇精品视频| 亚洲日本护士毛茸茸| 日本黄大片一区二区三区| 国产精品久久久久久久岛一牛影视 | 最近2019中文字幕mv免费看 | 欧美日韩免费在线观看| 国产精品秘入口| 国产丝袜高跟一区| 99re热精品视频| 91免费版黄色| 久久99国产精品免费网站| 色欲av无码一区二区人妻| 亚洲美女少妇撒尿| 麻豆tv入口在线看| 久久国产精品久久精品| 先锋资源久久| 中文字幕在线乱| 亚洲精品乱码久久久久久黑人| 日本在线视频站| 最近2019中文字幕一页二页 | 亚洲欧美在线播放| 亚洲理论电影片| 欧美精品免费观看二区| 91麻豆免费观看| 国产在线中文字幕| 国产亚洲欧美aaaa| 欧美mv日韩| 97av中文字幕| 欧美性猛交xxxxx免费看| 久久久一本精品| 91九色视频导航| 99在线精品视频| 二区三区在线播放| 欧美精品第一页在线播放| 99国产精品自拍| 欧美三级理论片| 精品国产91乱码一区二区三区| 国产一区二区区别| 日韩精品视频在线观看视频| 色综合天天在线| 亚洲精品v亚洲精品v日韩精品| 精品亚洲一区二区三区四区五区高| 久久精品视频免费观看| 亚洲第一图区| 成人av番号网| 久久久99精品免费观看不卡| 国产在线激情| 国产成人一区二区三区| 丁香天五香天堂综合| 欧美jizz18hd性欧美| 91爱视频在线| 高清不卡一区二区在线| 日本中文字幕在线观看| 国产精品久久久久久一区二区| 99久久国产综合精品女不卡| 午夜伦理在线视频| 91亚洲一区精品| 自拍偷拍国产亚洲| 久久久加勒比| 免费观看国产视频在线| 欧美性视频一区二区三区| 最新亚洲精品| 欧美丰满熟妇bbbbbb百度| 亚洲成成品网站| 国产精品综合| 国产高清一区在线观看| 国产精品久久久久久久9999| 久久伊人中文字幕| 丝袜美腿一区| 亚洲精品无人区| 欧美精品日韩综合在线| 91九色精品| 免费高清视频日韩| 欧美精品电影在线| 91亚洲永久精品| 欧洲成人一区| 亚洲小视频在线播放| 欧美成人一区二区三区片免费| 激情视频一区二区三区| 一级在线观看| 国产精品视频区1| 专区另类欧美日韩| 久久97久久97精品免视看秋霞| 成人一级片网站| 色婷婷综合久久久久| 狠狠色狠狠色综合日日91app| а√天堂8资源中文在线| 午夜久久资源| 欧美不卡123| 蜜桃av一区二区三区电影| 先锋影音在线资源站91| 日本在线成人一区二区| 精品日韩av一区二区| 日韩精品一二区| 电影k8一区二区三区久久| 亚洲开发第一视频在线播放| 亚洲激情在线视频| 国内国产精品久久| 欧美日韩在线精品一区二区三区激情综合 | 久久久久国产精品熟女影院| 中文字幕免费国产精品| 成人h动漫精品| 国产精品日韩精品在线播放 | 中文字幕久久一区| 亚洲区免费影片| 大白屁股一区二区视频| 四虎精品一区二区免费| 欧美精品99久久| 久久久久久久影院| 亚洲综合色婷婷| 亚洲自拍偷拍网| 久草免费在线观看| av不卡在线免费观看| www国产精品com| 国产欧美精品国产国产专区| 宅男在线一区| 国产黄色片在线播放| 亚洲国产一区二区在线| 国产一区二区三区在线观看网站| 91蝌蚪porny成人天涯| 亚洲第一福利专区| av在线播放av| 久久久久久久久久伊人| 电影一区中文字幕| 亚洲成人高清| 精品国产乱码久久久久软件| 欧美中文一区二区三区| 免费人成精品欧美精品| 久久91视频| 好吊妞这里只有精品| 精品久久蜜桃| 深夜福利日韩在线看| 亚洲尤物在线视频观看| 久久精品日产第一区二区| 日韩黄色三级在线观看| 黄页免费在线观看|