加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用循环数组的队列实现:哪种方法可以调整圆形数组的大

发布时间:2020-12-15 08:39:42 所属栏目:Java 来源:网络整理
导读:我正在使用循环数组实现一个队列,我有点陷入resize()方法实现(当数组已满时). 在enqueue()方法中,我检查数组的大小是否等于它的长度,如果它已满,则检查它.现在,我没有抛出异常,而是试图调整数组的大小. 问题是,我有两个案例需要考虑 前 =后方 后面前 将旧数
我正在使用循环数组实现一个队列,我有点陷入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并调整大小

我不确定用于做这件事的数量,我担心我会失去价值观.

有人能告诉我是否有更好的方法吗?

解决方法

要复制具有多个元素的数组,请使用 System.arraycopy(),因为它通常实现为本机代码,例如Sun的VM使用手工编码的汇编程序.

前面>后

由于数据是连续的,因此它可以保留在新数组中的相同位置.

System.arraycopy(oldArray,front,newArray,front-rear);

前面< =后面 数据是非连续的,因此将两个块复制到新数组的开头.

// copy [rear to end]
System.arraycopy(oldArray,rear,oldArray.length-rear);
// copy [0 to front]
System.arraycopy(oldArray,oldArray.length-rear,front);
front = oldArray.length-(rear-front);
rear = 0;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读