《Java数据结构与算法》数组结构:手写分析基础增删查

数组的概念

数组其实也是一个容器,可以用来存储固定个数相同类型的数据数组的定义
数组中存储的数据叫做元素

特点

  • 数组是引用数据类型
  • 数组初始化后长度固定
  • 数组内元素类型必须保持一致
  • 数组中的元素与元素之间的内存地址是连续的

以上是基本概念,大家一定不陌生
《Java数据结构和算法》中首先介绍了数组的增删查来引起读者思考

Demo案例:增删查

《Java数据结构和算法》原文中使用了一个运动员考勤登记的例子来进行阐述,感兴趣的小伙伴可以买本书看看

首先初始化一个固定数组

	/**
     * 声明一个固定长度的数组并赋值(不重复)
     * 起始元素从1开始依次递增
     */
    private static int[] getArrays(){
        int[] array = new int[60];
        for (int i = array.length - 31; i >= 0; i--) {
            array[i]=i+1;
        }
        System.out.println("初始化");
        System.out.println("int[]="+ Arrays.toString(array));
        return array;
    }

在这里插入图片描述

向该数组插入一个元素(允许重复)

	/**
     * 增:为传入数组赋值(不重复)
     */
    private static int[] setArrays(int[] arrays,int a){
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i]==0){
                arrays[i]=a;
                break;
            }
        }
        System.out.println("插入一条数据");
        System.out.println("int[]="+ Arrays.toString(arrays));
        return arrays;
    }

查询指定元素返回下标值(允许重复)

	/**
     * 查:在传入的数组内查询想要的值是否存在并返回下标
     */
    private static String findArrays(int[] arrays,int a){
        String j = "";
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i]==a){
                j=j+"["+i+"]";
            }
        }
        System.out.println("查询完毕");
        if ("".equals(j)){
            return  "数组内不存在该元素";
        }else {
            return  "存在该元素的下标为:"+j;
        }
    }

删除指定元素(允许重复)

	/**
     * 删:为传入的数组删除该元素
     */
    private static int[] delArrays(int[] arrays,int a){
        //不复杂的正逻辑基本思路
        //首先循环出对应的元素并删除(赋值为0)
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i]==a){
                arrays[i]=0;
            }
        }
        //调整下标,使存在元素的下标相连
        for (int i = 0; i < arrays.length; i++) {
            //假设该demo只传入一个元素进行删除,所以连续存在元素的下标不存在连续为0的情况
            if (arrays[i]==0 && arrays[i]==arrays[i+1]){
                //基于上述前提,这里当出现连续无值的情况直接跳出循环
                break;
            }
            if (arrays[i]==0){
                arrays[i]=arrays[i+1];
                arrays[i+1]=0;
            }
        }
        System.out.println("删除成功");
        return arrays;
    }

调用以上方法看效果

public static void main(String[] args) {
        /*
        1、该demo是基于允许元素出现重复的情况
        所以在插入算法中逻辑步数相对较少,查询时需要找出所有指定元素的下标,删除时也需要删除所有指定元素
        相对的,查询和删除的逻辑步数就相应增加
        2、还有一种是不允许出现重复元素的情况
        在插入时就需要添加更多的逻辑步数,相对的,查询和删除在找到指定元素后就可以返回结果了
         */
        //获取一个无重复元素的定长60的数组(前三十的下标已被赋值,未赋值下标会被0补齐)
        int[] arrays = getArrays();
        //为数组插入一条新的数据,插入的数据会顺序的插入第一个未赋值的数组下标内(允许插入重复值)
        setArrays(arrays,29);
        //查询输入元素的所有下标,打印返回提示信息(这里会存在一个问题,没有赋值的下标是0补齐的,所以这里先忽略)
        System.out.println(findArrays(arrays, 29));
        //删除指定元素(所有指定元素)
        System.out.println("int[]="+Arrays.toString(delArrays(arrays, 29)));
    }

在这里插入图片描述

学无止境,学海无涯
持续更新阅读《Java数据结构与算法》的所得所感
一起加油吧打工人~

案例已上传至github

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值