具體檔案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...