只需使用普通集合來存儲您的員工。在添加新員工並檢測到內存已滿時,只需確定具有最小排序順序標準的員工,並將其從數據庫中刪除即可。
既然你沒有提供的Employee類,我宣佈這裏一個例子:
class Employee {
int frequency;
Instant lastAccess;
}
您的數據庫(也可以是鏈表):
private List<Employee> myDatabase = new ArrayList<>();
與最小評估員工的comporator標準(第一頻率進行比較,如果等於lastAccess進行比較:
public int compare(Employee emp1, Employee emp2)
{
int result = emp1.frequency - emp2.frequency;
if (result == 0)
{
result = emp1.lastAccess.compareTo(emp2.lastAccess);
}
return result;
}
這裏的「主」方法,插入一個新員工到你的數據庫(isMemoryFull的實施留給你):
private void insertEmp(Employee emp)
{
if (isMemoryFull())
{
Employee minEmp = myDatabase.stream().min(this::compare).get();
myDatabase.remove(minEmp);
}
myDatabase.add(emp);
}
注:這適用於Java8 lambda表達式和溪流。對於java < 8,您必須將比較方法正式實現爲比較器,並使用Collections.sort而不是stream()。min()方法。
可能的重複http://stackoverflow.com/questions/221525/how-would-you-implement-an-lru-cache-in-java?rq=1 –
請看看堆數據結構[鏈接](https://en.wikipedia.org/wiki/Heap_%28data_structure%29) –
參考LRU緩存 –