学习笔记:用JAVA实现OPT FIFO LRU LFU

学习笔记:用JAVA实现OPT FIFO LRU LFU,第1张

学习笔记:用JAVA实现OPT FIFO LRU LFU

注:笔记是对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 Mapmap=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;imin){
                                    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(){//先进先出置换算法
        Queueq=new linkedList();
        for (int i=0;ilinkedlist=new linkedList();
        int start=0;
        for (int i=0;i0;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

List  list=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去。。

这是学了一个月的菜鸡的笔记,有错误还请大佬指正。


一天后更:

果然写笔记是有帮助的,今天实验一下子就打通思路了。

还有就是对前文的一些错误进行纠错。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5479785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存