流程图:

1. 代码
1 import java.util.ArrayList;
2
3 public class LRUCache {
4 private int cacheMaxSize = 0;
5 private ArrayList<Integer> pages = null; // Interger means page id
6
7 public LRUCache(int cacheMaxSize) {
8 this.cacheMaxSize = cacheMaxSize;
9 pages = new ArrayList<Integer>();
10 }
11
12 public void add(Integer p) {
13 if (pages.contains(p)) {
14 pages.remove(p);
15 pages.add(p);
16 } else if (pages.size() == cacheMaxSize) {
17 pages.remove(0);
18 pages.add(p);
19 } else {
20 pages.add(p);
21 }22 }
23 }
2. 测试的代码
import java.util.ArrayList;
import java.util.Scanner;
import xqy.been.LRUCache;
public class LRU {
private Scanner sc;
private LRUCache lc = null;
private ArrayList<Integer> pages = null;
public LRU() {
sc = new Scanner(System.in);
pages = new ArrayList<Integer>();
init();
op();
}
private void init() {
int key = -2;
System.out.print("<LRU> 请输入物理块个数:");
lc = new LRUCache(sc.nextInt());
System.out.println("<LRU> 请按顺序输入页号(exit: -1): ");
while (key != -1) {
key = sc.nextInt();
if (key > 0) {
pages.add(key);
}
}
}
private void op() {
for (int i = 0; i < pages.size(); i++) {
lc.add(pages.get(i));
}
}
public static void main(String[] args) {
new LRU();
}
}