JAVA实现页面置换算法——FIFO算法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Kwj1999999/article/details/80549765

有点遗憾,自己没有独立写出来,实在没有想到用Map来装数据,而且对Queue理解太生疏了。

看来自己学的东西还是不怎么熟练。。

其实最主要的是对FIFO算法比较陌生,没有思路。如果有和我一样没有思路的同学可以看一下FIFO原理!

FIFO算法:https://blog.csdn.net/yangpl_tale/article/details/44998423 (实在找不到单独介绍FIFO的文章)

import java.util.*;
import java.io.*;

public class Main{
	public static void main(String args []){
		FIFOmethod fm=new FIFOmethod();
	}
}

class FIFOmethod{
	int times;
	int fail;
	int cap;
	ArrayList<Integer> al=new ArrayList<Integer>();
	Map<Integer,Integer> mp=new HashMap<Integer,Integer>();  //使用Map可以方便替换元素,当key一样时,会覆盖value的值。
	public FIFOmethod(){
		Scanner in=new Scanner(System.in);
		fail=0;
		System.out.println("请输入用户指令:");
		String s=in.nextLine();
		String sarr[]=s.split(" ");
		times=sarr.length;
		for(int i=0;i<times;i++){
			al.add(Integer.parseInt(sarr[i]));
		}
		System.out.println("请输入容量:");
		cap=in.nextInt();
		run();
	}
	
	public void run(){
		Queue<Integer> q=new LinkedList<Integer>();
		for(int i=0;i<times;i++){
			int t=al.get(i);
			if(!mp.containsValue(t)){
				fail++;
				if(mp.size()<cap){
					int tmp=mp.size();
					mp.put(tmp, t);
					q.offer(tmp);
				}
				else{
					int tmp=q.poll();
					mp.remove(tmp);
					mp.put(tmp, t);
					q.offer(tmp);
				}
			}
			System.out.print("第"+(i+1)+"次 :");
			Set<Map.Entry<Integer, Integer>> st=mp.entrySet();
			Iterator<Map.Entry<Integer, Integer>> it=st.iterator();
			while(it.hasNext()){
				Map.Entry<Integer, Integer> me=it.next();
				System.out.print(me.getValue()+" ");
			}
			System.out.println();
		}
		System.out.println("命中率:"+(1-(float)fail/times));
	}
}
做个笔记。



展开阅读全文

没有更多推荐了,返回首页