数组复制与数组的扩容/缩容

本文详细介绍了Java中的数组复制方法arraycopy以及如何实现动态“扩容”和“缩容”。通过示例展示了如何使用Arrays.copyOf进行数组扩容,并在吃球游戏中应用动态缩容处理,将已吃掉的球从数组中移除,实现数组元素的更新和替换。
摘要由CSDN通过智能技术生成

arraycopy方法:

int[] src = {0,1,2,3,4,5,6,7,8,9};
int[] dest = {0,0,0,0,0,0,0,0,0,0};
System.arraycopy(src,0,dest,0,9);

从下标为0的位置开始复制,复制到dest数组中的0-9位置。

数组动态“扩容”
数组对象/长度不能改变,这里的动态扩容/缩容是通过复制更换新数组实现的!
Java中没有真正的扩容。JavaAPI底层都是采用这个策略进行“扩容”
int[] arr = {1,2,3,5,4,7};
        arr = Arrays.copyOf(arr,arr.length+1);
        for (int i = 0;i<arr.length;i++){
            System.out.println(arr[i]);
        }

吃方法,吃掉后进行缩容处理

public void eating(){
        //大球和小球
        Ball[] big = balls;
        Ball[] small = balls;
        boolean[] eaten = new boolean[small.length]; //创建了吃掉标志,默认都是false,表示没吃掉。boolean默认false
        int n = 0; //记录有几个球被吃掉了
        for (int i = 0;i<big.length;i++){   //每一个大球
            //如果大球已经被吃掉了,就忽略
            if(eaten[i]){
                continue;
            }
            for (int j=0;j<small.length;j++){   //每一个小球
                //球不能吃自己
                if(big[i]==small[j]){
                    continue;
                }
                //如果小球被吃掉就忽略
                if(eaten[j]){
                    continue;
                }
                if(big[i].eaten(small[j])){
                    System.out.println("吃...");
                    System.out.println(big[i].x+ ","+big[i].y+ ","+big[i].d);
                    System.out.println(small[j].x+ ","+small[j].y+ ","+small[j].d);
                    //把小球的位置设置为true
                    eaten[j] = true;
                    n++;
                }
            }
        }
        System.out.println(Arrays.toString(eaten));
        System.out.println(n);
        if(n==0){ //什么都没吃掉
            return;
        }
        //缩容处理
        Ball[] arr = new Ball[small.length]; //此时为新数组,但都为空
        int index = 0;
        for (int i =0;i<small.length; i++){
            if (!eaten[i]){  //如果index不为true
                arr[index++] = small[i]; //就放入arr中,不为true的元素都放进了数组,后面的部分为0
               // index++;
            }
        }
        System.out.println(Arrays.toString(arr));
       balls =  Arrays.copyOf(arr,arr.length-n); //缩容处理,并替换原数组
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值