java数组基础知识

数组

定义:

数组是一个存放类型相同、一组数的“容器”。

数据创建

类型[] 变量名 = new 类名[数组大小];

例如:

int[] num = new int[4];
int[] num = {1,2,3,4};

数组创建的时候做的事情:

1.数组在创建的时候会在堆中开辟一个存放N个长度的连续空间
2,给数组中的每个元素赋初值,依据当前数组类型决定的
3.将堆中的地址给具体的引用变量存放

静态创建数组对象时:

指定了数组个数以及数组中每个元素的值

动态创建数组:

创建数组的时候只指定长度,在运行的过程当中给数组的每个索引赋值。
例如:

int[] primes = new int[4];
primes[0] = 2;
primes[1] = 3;
primes[2] =5;
primes[3] =7;

数组常见的属性:

索引:数组中的有序,就是指的是索引有序,数组中索引是从0开始到数组长度-1结束。
长度:数组在定义的时候就会初始化长度,可以用length属性获取数组长度

数组的CRUD

数组的遍历:

有两种遍历方式:

1.普通for循环:

for(int i=0;i<num.length;i++){
System.out.println(num[i]);
}

2.增强for循环:

for(int n:num){
System.out.println(n);
}

给定一个指定长度的数组,进行初始化,初始化的元素范围是[13-109]

/**
     * 传入一个数组,初始化内容,范围为【13-109】
     * @param num
     */
    public static void initArray(int[] num) {
        try {
            for(int i=0;i<num.length;i++) {
                num[i]=(int)(Math.random()*97+13);
            }
        } catch (NullPointerException e) {
            throw new NullPointerException("传入的对象为null");
        }catch(ArrayIndexOutOfBoundsException e) {
            throw new ArrayIndexOutOfBoundsException("传入对象越界");
        }
    }

迭代数组中的每个元素

/**
     * 遍历数组元素,通过字符串输出
     * @param num 传入的数组
     * @return 返回数组中的每个元素
     */
    public static String toString(int[] num) {
        if(num==null) {
            return "null";
        }
        int iMax = num.length-1;
        if(iMax==-1) {
            return "[]";
        }
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for(int i=0;;i++) {
            sb.append(num[i]);
            if(i==iMax) {
                sb.append("]");
                return sb.toString();
            }
            sb.append(",");
        }
    }

修改数组中的某个值。将要修改的值传入 改变的值也传入

/**
     * 修改数组中的某个值。将要修改的值传入 改变的值也传入
     * @param num 要修改的数组
     * @param oldValue 要修改的值
     * @param newValue 要改变的值
     */
    public static void update(int[] num,int oldValue,int newValue) {
        int index = QuerByValue(num, oldValue);
        num[index]=num[newValue];
    }

截取数组 截取数组的指定位置的元素 变为一个新的数组返回

/**
     * 截取数组
     * @param num 要截取的数组
     * @param sIndex 其实索引
     * @param eIndex 
     * @return
     */
    public static int[] subArrys(int[] num,int sIndex,int eIndex) {
        int newNum[]=new int[eIndex-sIndex];
        for(int i=sIndex;i<eIndex;i++) {
            newNum[i-sIndex]=num[i];
        }
        return newNum;
    }

给数组排序 从小到大

冒泡排序
/**
     * 冒泡排序
     * @param num   传入的数组
     */
    public static void bubbleSort(int[] num) {
        for(int i=0;i<num.length-1;i++) {//趟数
            boolean flag = true;
            System.out.println("第"+(i+1)+"趟:");
            for(int j=0;j<num.length-1-i;j++) {//次数
                if(num[j]>num[j+1]) {
                    num[j]=num[j]^num[j+1];
                    num[j+1]=num[j]^num[j+1];
                    num[j]=num[j]^num[j+1];
                    flag= false;
                }
                System.out.println("第"+(j+1)+"次"+toString(num));
            }
            if(flag) {
                return;
            }
        }
    }
选择排序
/**
     * 选择排序
     * @param num 传入的数组
     */
    public static void selectedSort(int[] num) {
        for(int i=0;i<num.length-1;i++) {
            int index =i;
            for(int j=i+1;j<num.length;j++) {
                if(num[j]>num[j+1]) {
                    index=j;
                }
            }
            if(index!=i) {
                num[i]=num[index]^num[i];
                num[index]=num[index]^num[i];
                num[i]=num[index]^num[i];
            }
        }
    }

查找数组中指定的元素 如果没有返回-1

普通查找
/**
     * 获取指定值的索引
     * @param num   传入的数组
     * @param oldValue  指定的值
     * @return  返回索引
     */
    public static int QuerByValue(int[] num,int oldValue) {
        for(int i=0;i<num.length;i++) {
            if(num[i]==oldValue) {
                return i;
            }
        }
        return -1;
    }
二分法查找
/**
     * 二分查找发查找指定的索引
     * @param num 传入的数组
     * @param value 查找的值
     * @return 返回索引
     */
    public static int binerySearch(int[] num,int value) {
        int min =0;
        int max=num.length-1;
        int mid;
        while(min<=max) {
            mid=(min+max)/2;
            if(value>num[mid]) {
                min=mid+1;
            }else if(value<num[mid]) {
                max=mid-1;
            }else {
                return mid;
            }
        }
        return -1;
    }

删除数组中指定的元素 删除一个

    /**
     * 删除数组中指定的一个数
     * @param num 传入的数组
     * @param value 删除的值
     * @return 返回新的数组
     */
    public static int[] remove(int[] num,int value) {
        int index =QuerByValue(num, value);
        int[] newNum=new int[num.length-1];
        for(int i=0;i<index;i++) {
            newNum[i]=num[i];
        }
        for(int j=index+1;j<num.length;j++) {
            newNum[j-1]=num[j];
        }
        return newNum;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值