本文实例为大家分享了java实现页面置换算法的具体代码,供大家参考,具体内容如下

原理就不说了,直接上代码

FIFO

import java.util.ArrayList;

import java.util.List;

import utils.ListUtils;

/**

*

*

* @author cnkeysky

*

*/

public class FIFO {

public void run() {

String[] inputStr = {"1", "2", "3", "4", "2", "1", "2", "3", "5", "2", "3", "7", "6"};

// 内存块

int memory = 3;

List list = new ArrayList<>();

for(int i = 0; i < inputStr.length; i++){

if(i == 0){

list.add(inputStr[i]);

System.out.println("第"+ i +"次访问:\t\t" + ListUtils.listToString(list));

}else {

if(ListUtils.find(list, inputStr[i])){

System.out.println("第" + i + "次" + "访问:\t\t" + ListUtils.listToString(list));

}else{

if(list.size() < memory){

list.add(inputStr[i]);

}else{

list.remove(0);

list.add(inputStr[i]);

}

System.out.println("第" + i + "次" + "访问:\t\t" + ListUtils.listToString(list));

}

}

}

}

}

LRU

import utils.ListUtils;

import java.util.ArrayList;

import java.util.List;

/**

* 最近最久未用置换算法

* @author cnkeysky

*

*/

public class LRU {

public static void main(String[] args) {

String[] inputStr = {"6", "7", "6", "5", "9", "6", "8", "9", "7", "6", "9", "6"};

// 内存块

int memory = 3;

List list = new ArrayList<>();

for(int i = 0; i < inputStr.length; i++){

if(i == 0){

list.add(inputStr[i]);

System.out.println("第"+ i +"次访问:\t\t" + ListUtils.listToString(list));

}else {

if(ListUtils.find(list, inputStr[i])){

// 存在字符串,则获取该下标

int index = ListUtils.findIndex(list, inputStr[i]);

// 下标不位于栈顶时,且list大小不为1时

if(!(list.get(list.size() - 1)).equals(inputStr[i]) && list.size() != 1) {

String str = list.get(index);

list.remove(index);

list.add(str);

}

System.out.println("第" + i + "次" + "访问:\t\t" + ListUtils.listToString(list));

}else{

if(list.size()>= memory) {

list.remove(0);

list.add(inputStr[i]);

System.out.println("第" + i + "次" + "访问:\t\t" + ListUtils.listToString(list));

}else {

list.add(inputStr[i]);

System.out.println("第" + i + "次" + "访问:\t\t" + ListUtils.listToString(list));

}

}

}

}

}

}

Clock

import java.util.ArrayList;

import java.util.List;

import utils.ListUtils;

/**

*

*

* @author cnkeysky

*

*/

public class Clock {

public static void main(String[] args) {

String[] inputStr = {"6", "7", "6", "5", "9", "6", "8", "9", "7", "6", "9", "6"};

List list = new ArrayList<>();

// 内存块

int memory = 3;

// 缺页次数

int count = 0;

String[] clock = new String[memory];

int indexNext = 0;

int index = 0;

// 初始化时钟

for(int i = 0; i < memory; i++) {

clock[i] = "0";

}

for(int i = 0; i < inputStr.length; i++) {

int indexPre = 0;

if (i == 0) {

list.add(inputStr[i]);

clock[indexNext] = "1";

indexNext++;

System.out.println("第"+ i +"次访问:\t\t" + ListUtils.listToString(list));

}else {

if(ListUtils.find(list, inputStr[i])) {

indexPre = ListUtils.findIndex(list, inputStr[i]);

if(clock[indexPre].equals("0")) {

clock[indexPre] = "1";

}

count++;

System.out.println("第"+ i +"次访问:\t\t" + ListUtils.listToString(list));

}else {

if(list.size() < memory) {

list.add(inputStr[i]);

clock[indexNext] = "1";

indexNext++;

System.out.println("第"+ i +"次访问:\t\t" + ListUtils.listToString(list));

}else {

index = ListUtils.findZero(indexNext, clock, memory);

list.remove(index);

list.add(index, inputStr[i]);

clock[index] = "1";

indexNext = index + 1;

System.out.println("第"+ i +"次访问:\t\t" + ListUtils.listToString(list));

}

}

}

if(indexNext > memory - 1) {

indexNext = Math.abs(memory - indexNext);

}

}

System.out.println("缺页次数:" + (inputStr.length-count));

}

}

工具类ListUtils

import java.util.List;

public class ListUtils {

public ListUtils() {

}

/**

* 输出

* @param list 将List转为数组并输出, out: 2, 3, 4

* @return

*/

public static String listToString(List list){

StringBuffer content = new StringBuffer();

for(int i = 0; i < list.size(); i++){

content.append(list.get(i));

if(i < list.size() - 1){

content.append(",");

}

}

return content.toString();

}

/**

* 在list中查找是否有str

* @param list

* @param str

* @return

*/

public static boolean find(List list, String str){

boolean flag = false;

for(String lis : list){

if(lis.equals(str)){

flag = true;

}

}

return flag;

}

/**

* 在List中查找是否有String,如果有返回下标, 否则返回 -1

* @param list

* @param str

* @return

*/

public static int findIndex(List list, String str) {

int index = 0;

for(String lis : list) {

if(lis.equals(str)) {

return index;

}

index++;

}

return -1;

}

public static boolean clockJudge(String[] clock, int index) {

if(clock[index].equals("0")) {

return true;

}

return false;

}

/**

*

* @param index 下标

* @param clock 时钟

* @param range 当前使用内存块

* @return

*/

public static int findZero(int index, String[] clock, int range) {

while(true) {

if(clock[index].equals("0")) {

break;

}else {

clock[index] = "0";

index++;

if(index > range-1) {

index = Math.abs(range - index);

}

}

}

return index;

}

/**

* 在数组中查找是否存在该字符串

* @param obj

* @param str

* @return

*/

public static boolean strJudge(Object[] obj, String str) {

boolean flag = false;

if(obj == null) {

return flag;

}

for(int i = 0; i < obj.length; i++) {

if(str.equals(obj[i])) {

flag = true;

break;

}

}

return flag;

}

/**

* 获取二维数组中同一列的行的长度

* @param str 数据

* @param length 二维数组的列

* @param memory 内存块

* @return

*

*/

public static int findNull(Object[][] str, int length, int memory) {

int index = 0;

if(str == null) {

return -1;

}

for(int i = 0; i < memory; i++) {

if(str[i][length] != null) {

index = i;

}

}

return index;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-08-09

页面置换算法用java实现_java实现页面置换算法相关推荐

  1. freemarker java静态方法_java Freemarker页面静态化实例详解

    freemarker freemarker 是一个用 java 语言编写的模板引擎,它基于模板来生成文本输出.freemarker与 web 容器无关,即在 web 运行时,它并不知道 servlet ...

  2. java快排算法解读,java 快排的思路与算法

    java 快排的思路与算法 有时候面试的时候的会问道Arrays.sort()是怎么实现的,我以前根本不知道是什么东西,最近点进去看了一下.直接吓傻, //看到这个时候还是比较淡定的,可怕的事情来了. ...

  3. java 设置pdf页面大小_通过Java实现对PDF页面的详细设置

    前言 下面的示例将介绍通过Java编程来对PDF页面进行个性化设置的方法,包括设置页面大小.页边距.纸张方向.页面旋转等.这里有如下多种页面大小尺寸可供选择: 同时,设置文档内容旋转时,可支持如下角度 ...

  4. java 权重_java实现权重随机算法

    权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: im ...

  5. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...

    冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...

  6. java代码_Java 代码实现排序算法

       阅读本文约需要8分钟  大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下SpringBoot+Gradle+ MyBa ...

  7. 选择排序java代码_JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  8. java 回溯_java 实现迷宫回溯算法示例详解

    用一个7 x 7的矩形表示迷宫,0和1分别表示的是通路和障碍.通过设计编写程序找到蓝色小球达到蓝色旗子的路线 思路: 构建一个迷宫(用二维数组)实现找通路的方法findRoad() 构建二维数组不难, ...

  9. java算法 例 百度云_Java版数据结构与算法(20集版)视频教程百度云下载

    课程目录: 1 Y) C+ M. ~9 S' r7 i  J# _数据结构-Java版(20集)7 {2 h5 w' i9 C' }& }$ J |____第20讲 - 图的最小生成树.avi ...

  10. 银行家算法课程设计java语言_Java语言的银行家算法

    <Java语言的银行家算法>由会员分享,可在线阅读,更多相关<Java语言的银行家算法(12页珍藏版)>请在人人文库网上搜索. 1.湖北中医学院信息技术系 操作系统课程设计操作 ...

最新文章

  1. 分布式入门:常用的分布式基础算法
  2. 机器人学习--Robotics: Estimation and Learning(宾夕法尼亚大学COURSERA课程)
  3. 10 个 GitHub 上最火的程序员简历项目,2021 金三银四必备!
  4. 某考试 T1 monopoly
  5. JFinal整合CKFinder
  6. Nginx 过滤模块
  7. pytorch —— 图像预处理模块(Transforms)
  8. MySQL学习笔记十七:复制特性
  9. shell获取当前目录名的几种方法
  10. 安装Oracle 11g RAC R2 之Linux DNS 配置
  11. 自动控制原理期末复习(Part3时域分析)
  12. 泉州信息工程学院 计算机考试,泉州信息工程学院教务网络管理系统成绩查询、网上选课查分登录入口...
  13. Node交互式命令行工具开发——自动化文档工具
  14. 飞龙射击(Unity2D入门小游戏)
  15. 基于5G技术的智能导航机器人及AR巡逻应用开发项目实施方案(上)
  16. 数学分形之谢尔宾三角形
  17. Revit二次开发小技巧(十六)寻找最短路径
  18. mshtml 实现chrome获取元素selector算法
  19. python实现投标报价计算
  20. 不可用来编辑html的文件,没法设置和编辑版块、在首页不能编辑文章?

热门文章

  1. html提醒用户IE浏览器版本过低,引导更新或下载其他浏览器
  2. 计算机管理 网络连接服务,WZC服务未开启无法连接网络 解决方法及步骤
  3. 专业卸载工具Your Uninstaller! Pro
  4. FileZilla服务器乱码问题
  5. 基于thinkphp6开放,免费开源可商用的兴趣社区论坛圈子小程序
  6. VectorDraw(CAD) web library 9.9 Crack
  7. 画图工具graphics.h的下载安装
  8. 汇编:Debug的常用命令
  9. 无人驾驶安全报告分析
  10. 【论文阅读】Hierarchical Reinforcement Learning for Air-to-Air Combat 基于分层强化学习的空战决策