激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java實現頁面置換算法

java實現頁面置換算法

2020-08-09 22:41cnkeysky Java教程

這篇文章主要為大家詳細介紹了java實現頁面置換算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java實現頁面置換算法的具體代碼,供大家參考,具體內容如下

原理就不說了,直接上代碼

FIFO

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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<String> 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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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<String> 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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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<String> 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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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<String> 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<String> 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;
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/cnkeysky/article/details/80639376

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 毛片免费视频 | 国产精品久久久久网站 | 欧美成人一区在线观看 | 在线97视频| 久久精热| 日本黄免费 | 午夜亚洲视频 | 成人午夜a | 91精品国产日韩91久久久久久360 | 毛片在线视频免费观看 | 国产精品午夜性视频 | 毛片国产 | 欧美成人免费一区二区三区 | 成年人网站国产 | 99久久电影 | 亚洲αv | 九九视频精品在线观看 | 欧美精品99 | 久久久久久中文字幕 | 毛片在线不卡 | 精品国产看高清国产毛片 | 欧美一区高清 | 性爱网站 | 中国美女一级黄色片 | 红桃一区 | 狠狠色噜噜狠狠狠米奇9999 | 久色视频网站 | 毛片一区二区三区 | 免费黄色在线 | 国产亚洲在 | 亚洲九色 | 中文字幕精品在线视频 | 国产午夜亚洲精品午夜鲁丝片 | 毛片视频免费观看 | 中国妞xxxhd露脸偷拍视频 | 久久久久久久黄色片 | 精品一区二区免费 | 永久久久| 羞羞的视频免费 | 国产三级国产精品国产普男人 | av老司机久久 |