我正在使用循环数组实现一个队列,并且我有点卡在resize()
方法实现中(当数组已满时)。
在该enqueue()
方法中,我检查数组的大小是否等于它的长度,并获取它是否已满。现在,我没有抛出异常,而是尝试调整数组的大小。
问题是,我有两种情况要考虑
- 前 <= 后
- 后<前
将旧数组的元素复制到更大的新数组中的最佳方法是什么?
我认为它使用for循环,例如:
newArray = new Array[oldArray.length*2];
if (front <= rear) {
for (int i = front; i < rear; i++) {
newArray[i] = oldArray[i];
}
} else {
for (int i = front; i < newArray.length; i++) {
newArray[i] = oldArray[i];
}
for (int j = rear; j < front; j++) {
// i'm using the variable i, the order is maintained
newArray[i] = oldArray[j];
i++;
}
}
然后oldArray
= newArray
,返回newArray
并调整它的大小
我不确定用于执行此操作的 for 数量,我担心我会失去价值。
有人可以告诉我是否有更好的方法来做到这一点?