public class OPT {
private final int capacity = 3;// 构造一个初始容量为3的空列表
private int[] index = new int[2];//申请数组下标的容量为2
private List<Integer> list = new ArrayList<Integer>(capacity);//定义一个有界阻塞容器capacity即队列
public OPT(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (list.size() < capacity) { // 小于list初始容量
if (!list.contains(arr[i])) { // list没有该页面,将其添加进list尾部
list.add(arr[i]);//列表+1
} else {
continue;
}
} else {// 超出list容量
index[0] = 100;
index[1] = 101;
if (!list.contains(arr[i])) { // 下一个页面如果不在list中
int a = 0;
for (int j = i; j < arr.length; j++) {
if (list.contains(arr[j])) { // arr[j]这个页面会在测试数据中会出现较早
if (index[0] != list.indexOf(arr[j])) {
//indexOf()的用法:查找arr[j]中,第一次出现指定字符串的位置。 位置不是下标为0
index[a++] = list.indexOf(arr[j]);// 返回此列表中首次出现的指定元素的索引
if (a == 2) {
break;
}
}
}
}
list.set(noExist(), arr[i]);// 置换掉永不使用的,或许在最长时间内不再访问的页面
} else { // 下一个页面在list中
continue;//列表保持不变
}
}
traverse();//调用traverse函数
}
System.out.println("访问页面需从外存调入的次数为:"+(num-1));//计算访问页面需要从外存调入的次数
System.out.println("缺页率为:"+(1-(float)(num-1)/arr.length));//计算缺页率
}
https://blog.csdn.net/AdvancingStone/article/details/79110586