我有一个数组,可以说:LRU_frame [] = {4,1,0,3}
我有一个random()函数,它会吐出一个随机数。如果数组LRU_frame中包含随机数n,则n应该在LRU_frame [0]上,并且所有其他内容都必须相应地下移。
例如,如果random()给我0,则新的LRU_frame [] = {0,4,1,3}
另一个示例,如果random()给我3,则新的LRU_frame [] = {3,4,1,0}
如何对其中包含任意数量的任何数组大小执行此操作?
我知道如何通过在LRU_frame [0]上添加新元素来移动数组,但不知道如何像我需要的那样重新组织数组。
这是我到目前为止的代码,我们假设char a是要使用和重新组织数组的随机数(强制转换为char)。
public static void LRU_shiftPageRef(char a) {
for (int i = (LRU_frame.length - 2); i >= 0; i--) {
LRU_frame[i + 1] = LRU_frame[i];
}
LRU_frame[0] = a;
}
最佳答案
您有一个好主意,只需要找到数组中a
元素的位置并从中开始循环即可,而不是LRU_frame.length
。
int index = -1;
// find the positon of 'a' in the array
for (int i = 0; i <= (LRU_frame.length - 1); i++) {
if (LRU_frame[i] == a) {
index = i;
break;
}
}
// if it is present, do roughly the same thing as before
if (index > -1) {
for (int i = (index - 1); i >= 0; i--) {
LRU_frame[i + 1] = LRU_frame[i];
}
LRU_frame[0] = a;
}
但是,如果可以使用
ArrayLists
,它将变得更加容易。// declaration
ArrayList<Integer> LRU_frame = new ArrayList<Integer>();
...
if (LRU_frame.contains(a)) {
LRU_frame.remove((Integer) a);
LRU_frame.add(0, a);
}