移动和重新组织阵列

时间:2014-04-01 19:44:06

标签: java arrays

我有一个数组,让我们说:LRU_frame [] = {4,1,0,3}

我有一个random()函数,它会吐出一个随机数。如果随机数n包含在数组LRU_frame中,则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;

}

3 个答案:

答案 0 :(得分:1)

你有一个好主意,你只需要在数组中找到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);
}

答案 1 :(得分:1)

我认为这可能是你所追求的事情:

public static void LRU_shiftPageRef(char a) {
    int index = indexOf(a);
    if (index == -1) {
        //not currently in array so create a new array 1 bigger than existing with a in newArray[0] or ignore depending on functionality required.
    } else if (index > 0) {
        //Set first entry as a and shift existing entries right
        char insertChar = a;
        char nextChar = LRU_frame[0];
        for (int i =0; i < index; i++) {
             LRU_frame[i] = insertChar;
             insertChar = nextChar;
             nextChar = LRU_frame[i+1];
        }
        LRU_frame[index] = insertChar;
    } else {
        //do nothing a is already at first position
    }
}

public static int indexOf(char a) {
    for (int i=0; i < LRU_frame.length; i++) {
        if (LRU_frame[i] == a) {
            return i;
        }
    }
    return -1;
}

答案 2 :(得分:0)

使用Arrays.sort(LRU_frame);对整个数组进行排序,或使用Arrays.sort(LRU_frame, fromIndex, toIndex));对数组的一部分进行排序。

Arrays类还有其他有用的方法,例如copyOfRange