UIL的LRU演算法原始碼查閱

2021-07-22 08:07:31 字數 1479 閱讀 3268

具體檔案lrumemorycache

在我看來,應該用的資料結構是arraylist,然後將各個key值的索引數字記錄下來,然後去更新對應的索引,不對啊,這個是lfu!!

好吧,應該用乙個鍊錶來把資料串起來,然後去更新資料。核心問題點是如何在buffer滿的時候移除老的資料呢??直接移除吧!!自己搞混了lfu和lru導致思路混亂。

private final linkedhashmapmap;

private final int maxsize;

/** size of this cache in bytes */

private int size;

從上面看出資料結構是linkedhashmap(我自己可能會搞個linked 然後把map存進去)

還有就是maxsize,size,這兩個變數作為裁剪的變數
@override

public final bitmap get(string key)

synchronized (this)

}

直接用map裡面取到資料,取的時候,會將資料先斷開連線,然後放在鍊錶的尾巴上去,這個時候是最新用的資料。
具體實現:
private void maketail(linkedentrye)

@override

public final boolean put(string key, bitmap value)

synchronized (this)

}trimtosize(maxsize);

return true;

}

上述**將資料會存到map中,然後更新size,最重要的是對陣列做裁剪
具體裁剪的**如下:
private void trimtosize(int maxsize) 

//裁剪完成了,直接中斷迴圈

if (size <= maxsize || map.isempty())

map.entrytoevict = map.entryset().iterator().next();

if (toevict == null)

key = toevict.getkey();

value = toevict.getvalue();

map.remove(key);

size -= sizeof(key, value);}}

}

上述**用迭代器來取,先取最老的資料,然後每次做裁剪,如果裁剪到記憶體以內,那麼終止裁剪

Floyd演算法原始碼

思路什麼的應該都清楚,直接上原始碼 vs上以除錯 此演算法用的是有向網結構儲存 include using namespace std const int max vertex num 20 const int ok 1 const int error 1 const int overflow 2 ...

STL原始碼 演算法sort

sort演算法接受兩個randomaccessiterators 隨機訪問迭代器 然後對區間內元素以漸增方式由小到大排序 另乙個版本允許使用者指定排序方式。stl的所有關聯容器都擁有自動排序功能 以為底層的rb tree是自動排序的 因此,不需要使用sort演算法。順序容器中stack queue ...

KNN演算法原始碼解析

created on sep 16,2010 knn k nearest neighbors input inx vector to compare to existing dataset 1xn dataset size m data set of known vectors nxm labels...