国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LinkedHashMap實(shí)現(xiàn)LRU緩存cache機(jī)制,Kotlin

這篇具有很好參考價(jià)值的文章主要介紹了LinkedHashMap實(shí)現(xiàn)LRU緩存cache機(jī)制,Kotlin。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

LinkedHashMap實(shí)現(xiàn)LRU緩存cache機(jī)制,Kotlin

?

LinkedHashMap的accessOrder=true后,訪(fǎng)問(wèn)LinkedHashMap里面存儲(chǔ)的元素,LinkedHashMap就會(huì)把該元素移動(dòng)到最尾部。利用這一點(diǎn),可以設(shè)置一個(gè)緩存的上限值,當(dāng)存入的緩存數(shù)理超過(guò)上限值后,刪掉LinkedHashMap頭部元素即可(因?yàn)樽铑^部意味著沒(méi)有被多少使用)。

至于刪除最頭部的元素,我們自己可以寫(xiě)代碼,把最頭部(第一個(gè))元素找出來(lái),然后刪掉。但是,剛好,LinkedHashMap內(nèi)部源代碼實(shí)現(xiàn)有一個(gè)函數(shù):

    protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
        return false;
    }

它默認(rèn)返回false,如果該函數(shù)返回true,那么LinkedHashMap就會(huì)去刪除頭部最老的值。在代碼中動(dòng)態(tài)判斷當(dāng)前存儲(chǔ)的元素?cái)?shù)理是否超過(guò)緩存上限,超過(guò)就返回true,讓LinkedHashMap刪除最頭部(最老的)值。

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-700586.html

?

import java.util.LinkedHashMap

class Lru(
    initialCapacity: Int,
    loadFactor: Float,
    accessOrder: Boolean
) : LinkedHashMap<Int, String>(initialCapacity, loadFactor, accessOrder) {
    private val CACHE_LIMIT: Int = 3

    //accessOrder=true改變LinkedHashMap的存儲(chǔ)策略
    constructor() : this(10, 0.75F, true)

    //如果當(dāng)前的map尺寸大于緩存上限
    //刪除最老的元素。
    override fun removeEldestEntry(eldest: MutableMap.MutableEntry<Int, String>?): Boolean {
        return size > CACHE_LIMIT
    }
}

fun main(args: Array<String>) {
    val map = Lru()
    map[1] = "A"
    map[2] = "B"
    map[3] = "C"
    println(map)
    println("-")

    //插入D后,最頭的A被刪除。
    println("插入D")
    map[4] = "D"
    println(map)
    println("-")

    //插入E后,最頭的B被刪除。
    println("插入E")
    map[5] = "E"
    println(map)
    println("-")

    println("訪(fǎng)問(wèn)C")
    println(map[3])
    println(map)
}

特意設(shè)置最多緩存3個(gè)元素,看代碼運(yùn)行結(jié)果:

{1=A, 2=B, 3=C}
-
插入D
{2=B, 3=C, 4=D}
-
插入E
{3=C, 4=D, 5=E}
-
訪(fǎng)問(wèn)C
C
{4=D, 5=E, 3=C}

?

?

?

Java的HashMap與LinkedHashMap異同_zhangphil的博客-CSDN博客??一句話(huà)概括的說(shuō):兩者最大的不同就是,HashMap不保證put進(jìn)去的數(shù)據(jù)的順序;而LinkedHashMap則保證put進(jìn)去的數(shù)據(jù)的順序。換句話(huà)也就是說(shuō),HashMap添加進(jìn)去的數(shù)據(jù)順序和遍歷時(shí)的數(shù)據(jù)順序不一定;而LinkedHashMap則保證添加時(shí)數(shù)據(jù)順序是什么,遍歷時(shí)數(shù)據(jù)順序是什么。例如,假如在HashMap中依次、順序添加元素:1,2,3,4,5,在遍歷HashMap時(shí)輸出的順https://blog.csdn.net/zhangphil/article/details/44115629

基于Java LinkedList,實(shí)現(xiàn)Android大數(shù)據(jù)緩存策略_zhangphil的博客-CSDN博客import java.util.HashMap;import java.util.LinkedList;/* * 基于Java LinkedList,實(shí)現(xiàn)Android大數(shù)據(jù)緩存策略 * 作者:Zhang Phil * 原文出處:http://blog.csdn.net/zhangphil * * 實(shí)現(xiàn)原理:原理的模型認(rèn)為:在LinkedList的頭部元素是最舊的緩存數(shù)據(jù),在L_android大數(shù)據(jù)緩存https://blog.csdn.net/zhangphil/article/details/44116885

?

到了這里,關(guān)于LinkedHashMap實(shí)現(xiàn)LRU緩存cache機(jī)制,Kotlin的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • LinkedHashMap 簡(jiǎn)單實(shí)現(xiàn)LRU

    要使用 LinkedHashMap 來(lái)實(shí)現(xiàn)LRU(最近最少使用)緩存,可以設(shè)置它的訪(fǎng)問(wèn)順序?yàn)?true ,以便在每次訪(fǎng)問(wèn)一個(gè)元素時(shí),將它移到最后,從而實(shí)現(xiàn)LRU的特性。以下是一個(gè)簡(jiǎn)單的Java示例: 在上面的示例中,創(chuàng)建了一個(gè) LRUCache 類(lèi),它擴(kuò)展了 LinkedHashMap ,并在構(gòu)造函數(shù)中設(shè)置了訪(fǎng)問(wèn)順序

    2024年02月08日
    瀏覽(24)
  • 如何使用Python內(nèi)置緩存裝飾器: @lru_cache,@cache 與 @cached_property

    使用緩存是優(yōu)化Python程序速度的重要方法之一 。如果使用得當(dāng),可以大幅減少計(jì)算資源的負(fù)載,有效加快代碼運(yùn)行速度 Python 的內(nèi)置庫(kù) functools 模塊附帶了 @lru_cache,@cache, @cached_property 裝飾器,使用非常簡(jiǎn)便,不需要安裝第3方庫(kù),不需要 redis 等數(shù)據(jù)庫(kù)保存對(duì)象等,通常只需要

    2024年02月11日
    瀏覽(25)
  • [力扣146. LRU 緩存 ](https://leetcode.cn/problems/lru-cache/description/)

    力扣146. LRU 緩存 使用LinkedHashmap(HashMap的子類(lèi),能夠記住插入數(shù)據(jù)的順序). LRU是Lease Recently User的縮寫(xiě),意思是最近 最少使用。比如設(shè)計(jì)一個(gè)文件緩存系統(tǒng),每個(gè)文件有自己的大小和訪(fǎng)問(wèn)時(shí)間,文件緩存系統(tǒng)有總的大小,當(dāng)往這個(gè)文件系統(tǒng)中放入新的文件時(shí),如果發(fā)現(xiàn)超出文件

    2024年02月11日
    瀏覽(54)
  • SPARK--cache(緩存)和checkpoint檢查點(diǎn)機(jī)制

    rdd的特性 緩存和checkpoint 作用都是進(jìn)行容錯(cuò) rdd在計(jì)算是會(huì)有多個(gè)依賴(lài),為了避免計(jì)算錯(cuò)誤是從頭開(kāi)始計(jì)算,可以將中間* 依賴(lài)rdd進(jìn)行緩存或checkpoint 緩存或checkpoint也叫作rdd的持久化 一般對(duì)某個(gè)計(jì)算特別復(fù)雜的rdd進(jìn)行持久化 緩存使用 緩存是將數(shù)據(jù)存儲(chǔ)在內(nèi)存或者磁盤(pán)上,緩存

    2024年01月16日
    瀏覽(20)
  • [算法與數(shù)據(jù)結(jié)構(gòu)]:LRU Cache 的原理與C++實(shí)現(xiàn)

    ? LRU全稱(chēng)是Least Recently Used,即 最近最久未使用,是一種簡(jiǎn)單的緩存策略。顧名思義,LRU 算法會(huì)選出最近最少使用的數(shù)據(jù)進(jìn)行淘汰。 ? 那么什么是緩存(Cache)呢?緩存是一種提高數(shù)據(jù)讀取性能的技術(shù),可以有效解決存儲(chǔ)器性能和容量的矛盾,是一種空間換時(shí)間的設(shè)計(jì)思想,比

    2024年01月20日
    瀏覽(34)
  • 【數(shù)據(jù)結(jié)構(gòu)】LRU緩存的簡(jiǎn)單模擬實(shí)現(xiàn)(leetcode力扣146LRU緩存)

    【數(shù)據(jù)結(jié)構(gòu)】LRU緩存的簡(jiǎn)單模擬實(shí)現(xiàn)(leetcode力扣146LRU緩存)

    LRU是Least Recently Used的縮寫(xiě),意思是最近最少使用,它是一種Cache替換算法。 Cache的容量有限,因此當(dāng)Cache的容量用完后,而又有新的內(nèi)容需要添加進(jìn)來(lái)時(shí), 就需要挑選并舍棄原有的部分內(nèi)容,從而騰出空間來(lái)放新內(nèi)容。LRU Cache 的替換原則就是將最近最少使用的內(nèi)容替換掉。

    2024年02月03日
    瀏覽(23)
  • 【算法】用JAVA代碼實(shí)現(xiàn)LRU 【緩存】【LRU】

    LRU(Least Recently Used)是一種常見(jiàn)的緩存淘汰策略,用于在緩存空間不足時(shí)確定哪些數(shù)據(jù)應(yīng)該被淘汰。其基本原則是淘汰最近最少被訪(fǎng)問(wèn)的數(shù)據(jù)。 工作原理 : 最近使用優(yōu)先 : LRU算法基于這樣的思想:最近被使用的數(shù)據(jù)很可能在短時(shí)間內(nèi)還會(huì)被使用,因此保留這些數(shù)據(jù)有助于

    2024年01月23日
    瀏覽(23)
  • 面試遇到算法題:實(shí)現(xiàn)LRU緩存

    面試遇到算法題:實(shí)現(xiàn)LRU緩存

    請(qǐng)你設(shè)計(jì)并實(shí)現(xiàn)一個(gè)滿(mǎn)足 LRU (最近最少使用) 緩存約束的數(shù)據(jù)結(jié)構(gòu)。 這是一道大廠(chǎng)面試高頻出現(xiàn)的算法題,難度為??????,屬于中等,老鐵們來(lái)一起看看這個(gè)題該怎么解? 沒(méi)有廢話(huà),翠花,上酸菜! 為了實(shí)現(xiàn)一個(gè)滿(mǎn)足 LRU (最近最少使用)緩存約束的數(shù)據(jù)結(jié)構(gòu),我們需

    2024年04月25日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之LRU: 實(shí)現(xiàn) LRU 緩存算法功能 (Javascript版)

    關(guān)于LRU緩存 LRU - Lease Recently Used 最近使用 如果內(nèi)存優(yōu)先,只緩存最近使用的,刪除 ‘沉睡’ 數(shù)據(jù) 核心 api: get set 分析 使用哈希表來(lái)實(shí)現(xiàn), O(1) 必須是有序的,常用放在前面,沉睡放在后面, 即:有序,可排序 這樣 {} 不符合要求;Map是可以排序的,按照設(shè)置順序 不用 Map 如何

    2024年02月06日
    瀏覽(30)
  • rust里如何快速實(shí)現(xiàn)一個(gè)LRU 本地緩存?

    LRU是Least Recently Used(最近最少使用)的縮寫(xiě),是一種常見(jiàn)的緩存淘汰算法。LRU算法的基本思想是,當(dāng)緩存空間已滿(mǎn)時(shí),優(yōu)先淘汰最近最少使用的數(shù)據(jù),以保留最常用的數(shù)據(jù)。 在計(jì)算機(jī)系統(tǒng)中,LRU算法常用于緩存系統(tǒng)、頁(yè)面置換算法等場(chǎng)景,以提高數(shù)據(jù)訪(fǎng)問(wèn)的效率和性能。 要

    2024年02月13日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包