注:笔记是对fengsigaoju大佬的实现页面置换算法一文((35条消息) JAVA实现页面置换算法(OPT,FIFO,LRU)_fengsigaoju的博客-CSDN博客_页面置换算法代码java)的学习,侵删。
初学一个月JAVA,如有不足请指出。
先上代码:
import java.io.BufferedInputStream; import java.util.*; public class Main { private int n;//内储页框 private int m;//访问次数 private int F;//没能直接找到的次数,(F/m)为缺页率 private Listlist=null;//访问地址走向 private Map map=null; public Main(){ F=0; map=new HashMap ();//存储每一个内储页框所存的内容 Scanner cin=new Scanner(new BufferedInputStream(System.in)); System.out.println("请输入用户访问页地址走向"); list=new ArrayList (); String s=cin.nextLine(); String []s1=s.split(" "); m=s1.length; for (int i=0;i min){ index=t;//更新值 min=j-i; } break; } } if (j==m){//如果到最后 index=t; min=j-i; } } map.remove(index); map.put(index,k);//修改表内元素 } } } System.out.println("误码率为:"+F*1.0/m); } public void FIFO(){//先进先出置换算法 Queue q=new linkedList (); for (int i=0;i linkedlist=new linkedList (); int start=0; for (int i=0;i 0;j--){ if (list.get(j)==map.get(t)){ num++; } if(min 不得不说,就我而言的话,我认为这段代码还是写的很棒滴。
第四种方法LFU是我自己加的,写的不是特别好,但是满足了教科书所要求的四种方法。
至于CLOCK算法,有空了再更。
接下来是对这段代码的理解:
一、使用到的代码:
1.第一行的import BufferedInputStream对于初学者来说有点深入了,当此行去掉,将原有的
Scanner cin=new Scanner(new BufferedInputStream(System.in));改为
Scanner cin=new Scanner(System.in);也可正常运行;
2.List
Listlist=new ArrayList (); 这句代码可以让我们调用List接口里的内置函数,例如add,get。
3.HashMap
哈希表是一个非常实用的类型,主要特征是有key-value键值对,单从这一点容易让人联系到Python中的字典,但功能远比其丰富。
很多的内置函数都是可以从字面判断出来的:
containsValue(k)在表中查找是否有k的value。
size()返回键值对的数量。
put() 添加或者修改键值对。
remove()移出键值对,返回值为删除的值。
get()返回键所对应的值。
4.Queue
q.offer:在queue中有两种添加方法,add以及offer。两者区别是add在队列满时报错,而offer会返回false,而其他区别目前本人还没有发现。
q.remove:和pop一样是删除头元素,在空队列时,remove报错,pop返回null。
5.linkedlist
链表,算是非常常见的类型吧,这里就不多赘述了。
二、阅读代码遇到的问题
1、阅读LRU()的时候那个temp指针把我弄晕了。。。后来上编译器才发现这两个if里头的temp压根不一样。。。可见编译器的重要性了
三、总结
总的来说还是比较基础的代码,学校实验真是难的一批,写写这方面的笔记找找灵感。本来想写长一点的结果女朋友叫我帮她写Python去。。
这是学了一个月的菜鸡的笔记,有错误还请大佬指正。
一天后更:
果然写笔记是有帮助的,今天实验一下子就打通思路了。
还有就是对前文的一些错误进行纠错。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)