数组的插入和删除

数组的插入和删除

数组的插入:

比如 a[10]定义的数组长度为10 

插入数据之后数组长度不是应该变为11吗

同理删除数据数组长度不是应该变为9吗?

单纯的数据移位,那数组最后的那个元素的值不是丢失了吗?

如果要做这种数组长度变更的删除和插入该怎么做?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,数组的长度一旦定义了则无法改变。例如:int[] arr = new int[10],声明了一个数组长度为10的整型数组,此时数组中元素均是有初始值的,均为0,也就是说数组arr中元素为十个零。若想要修改数组长度则需要重新对数组进行初始化,例如arr = new int[5];

https://img1.sycdn.imooc.com//climg/63799010095ba8ea05350358.jpg

  1. 问题中描述的“插入数据、删除数据”具体指代的是什么呢?建议结合代码具体描述下同学的疑问。

  2. 若是按照如下数据依次移动的方式,则会导致最后一个元素丢失。

    https://img1.sycdn.imooc.com//climg/63798f1b09f6baa007880507.jpg

  3. 若是需要修改数组长度实现插入、删除操作,则需重新定义一个新的数组,用于接收修改后的数组元素的值。

祝学习愉快~

  • 一脸懵逼的萌新 提问者 #1

    如果是新创建的话

    int[] n=new int[10];

    n=new int[5];

    这种情况那新开辟的地址 是覆盖之前的内存地址还是重新开辟一片地址,

    如果是新开辟一片地址那之前旧的地址会自动示范吗?


    2、如果我希望返回值是数组 也就是pubic int[] insertArr(int n,int b,int[] passArr){

        //新建一个数组,循环赋价给新的数组

        int jieshouArr = new int[11];

        for(int i=0;i<passArr.length;i++){

            jieshouArr [i]=passArr[i];

        }    

       // 这样赋予之后最后一个元素就为0 并空了出来

        //然后在想视频所示移动位置,插入到指定位置,最后返回新的这个数组

        return jieshouArr ;


    }


    那我在接受这个返回值的时候 是否可以直接

    int [] passArr = new int[10];

    //在下标3的地方插入4

    int xxxArr = className.insertArr(3,4,passArr );

    这个时候在打印xxxArr.length 应该是11


    请问上述方法可以这么搞吗

    2022-11-20 14:30:20
  • 一脸懵逼的萌新 提问者 #2
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    package imooc.com.lvyouDemo;
     
    public class InsertArrClass {
     
        public int[] insertArr(int insertIndex,int insertNum,int[] passArr){
            int[] insertA = new int[passArr.length+1];
            for(int i=0;i<passArr.length;i++) {
                insertA[i]=passArr[i];
            }
             
            for(int i=insertA.length-1;i>insertIndex;i--) {
                insertA[i]=insertA[i-1];
            }
            insertA[insertIndex] = insertNum;
            return insertA;
        }
         
        public int[] deletaArr(int deletaIndex,int[] passArr){
            int[] deletaA = new int[passArr.length-1];
            int num=0;
            for(int i=deletaIndex;i<passArr.length;i--) {
                passArr[deletaIndex+num]=passArr[deletaIndex+num+1];
                num++;
                if(num>passArr.length-deletaIndex-2) {
                    break;
                }
            }
             
            for(int i=0;i<deletaA.length;i++) {
                deletaA[i]=passArr[i];
            }
            return deletaA;
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] passArr = {1,2,3,4,5,6,7,8};
            InsertArrClass vc = new InsertArrClass();
            int[] xinArr = vc.insertArr(8,9,passArr);
            System.out.println("插入后新的数组长度"+xinArr.length);
             
            System.out.print("插入后后新的数组元素");
            for(int i:xinArr) {
                System.out.print(i+" ");
            }
             
            xinArr = vc.deletaArr(4,passArr);
            System.out.println();
            System.out.println("删除后新的数组长度"+xinArr.length);
            System.out.print("删除后新的数组元素");
            for(int i:xinArr) {
                System.out.print(i+" ");
            }
        }
     
    }

    这样写不是是更符合主题,这样写会不会有什么问题?

    2022-11-20 15:59:47
  • 同学你好

    1. 开辟新地址,旧的会被回收。

    2. 同学代码实现是可以的,不过要注意数组下标的范围,避免出现数组下标越界。

    注:同学也可尝试使用Arrays.copy方法实现数组的复制哦。

    https://img1.sycdn.imooc.com//climg/6379e56e09ded27208730070.jpg

    https://img1.sycdn.imooc.com//climg/6379e8d50943e54914710245.jpg

    代码示例如下:

    1
    2
    3
    4
    5
    int[] passArr = {12345678};
    int[] a1 = Arrays.copyOf(passArr, passArr.length);
    int[] a2 = Arrays.copyOf(passArr, passArr.length + 1);
    int[] a3 = Arrays.copyOf(passArr, passArr.length - 1);
    System.out.println(Arrays.toString(a1) + "\n" + Arrays.toString(a2) + "\n" + Arrays.toString(a3));

    运行结果如下:

    https://img1.sycdn.imooc.com//climg/6379e8960977a27e03500095.jpg

    祝学习愉快~

    2022-11-20 16:44:55
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码