###数组

1.数组

1.1数组的概念

数组:一组连续的空间,存放的是一组相同数据类型的数据。

//静态初始化(用的多)
int[] array1 = {1,2,3,4,5};
//动态初始化
int[] array2 = new int[10];//大小为10   默认存储的就是0
int[] array3 = new int[]{1,2};

1.2数组的使用

1.数组基本用法

 public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        System.out.println(array.length);//获取数组长度
        System.out.println(array[0]);//访问数组中的元素
        array[2] = 100;//修改数据
        System.out.println(array[2]);
    }

注:使用数组要谨防下标越界 array[6]

2.遍历数组

  public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + "");//第一种打印方式  for循环
        }
        System.out.println("----增强for循环--------"); //第二种打印方式  增强for循环 也叫for each循环
        for (int val :array){
            System.out.print(val+"");
        }
        System.out.println("----使用操作数组的工具类Arrays-----"); //第三种 使用操作数组的工具类Arrays
        String ret = Arrays.toString(array);
        System.out.println(ret);
    }

结果:
在这里插入图片描述
注:在这里插入图片描述

1.3数组作为方法的参数

  1. 引用变量:当前变量存储的是一个地址
    调用函数 函数名();
  public static void func1(int[] array){
        array = new int[5];
    }
    public static void func2(int[] array){
        array[2] = 9;
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        func1(array);
        System.out.println( Arrays.toString(array));
        func2(array);
        System.out.println(Arrays.toString(array));
    }

结果:
在这里插入图片描述
注:
在这里插入图片描述
所以改变形参不会影响实参

  1. int[ ] array = null; //代表array这个引用不指向任何对象
    System.out.println(array[3]);会显示异常,无法访问

1.4数组练习

1.4.1. 求平均数

 public static double avg(int[] array) {
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            sum += array[i];
        }
        return sum * 1.0 / array.length; //要乘以1.0才能保存小数
    }

    public static void main(String[] args) {
        int[] array = {1,3,5,-1,-3};
         double ret =  avg(array);//接受array的返回值
        System.out.println(ret); //打印返回值
    }

1.4.2. 求数组最大值

 public static int max(int[] array) {
        int max= array[0];
        for (int i = 1; i < array.length; i++) {
            if (max < array[i]) {
                max = array[i];
            }
        }
        return max;
    }

    public static void main4(String[] args) {
        int[] array = {1,2,3,4,5};
        int ret = max(array);
        System.out.println(ret);
    }

1.4.3. 查找数组中指定的元素的位置【顺序查找,二分查找】

方法1:【顺序查找】

 public static int  findVal(int[] array,int key) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == key) {
                return array[i];
            }
        }
        return -1;//下标为-1,代表没有找到指定的元素
    }

    public static void main(String[] args) {
        int[] array = {1,3,6,7,9};
        System.out.println(findVal(array,8));//在array数组里找8,这种写法就不用定义了,对比题2
    }

结果:-1 //没有找到

方法2:【二分、折半查找】
前提:数组必须是有序的
思路:以升序数组为例,先取中间位置的元素,看要找的值比中间元素大还是小,如果小,就去左边找;否则,就去右边找

 public static int binarySearch(int[] array,int key) {
        int i = 0;
        int j = array.length-1;
       while(i <= j){
           int mid = (i+j)/2;  //因为mid随着i和j变化,所以定义在里面
           if (array[mid] < key) {
               i = mid + 1;
           }else if (array[mid] > key) {
               j = mid - 1;
           }else{
               return mid;
           }
       }
            return -1;
        }

    public static void main(String[] args) {
        int[] array = {1,3,6,7,9};
        System.out.println(binarySearch(array,6));
    }

结果:2

1.4.4. 检查数组的有序性

public static boolean isUp(int[] array) {
        for (int i = 0; i < array.length - 1; i++) { //注意是array.length-1
            if (array[i] > array[i + 1]) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,5,6};
        System.out.println(isUp(array));
    }

1.4.5. 冒泡排序

   public static void bubbleSort(int[] array){
        if (array == null) return;
        for (int i = 0; i < array.length-1; i++) {  //几趟
            boolean flg = false; //每次重置为false,判断有没有进行交换
            for (int j = 0; j < array.length-1-i; j++) {  //j取到几
                if (array[j] > array[j+1]) {
                    int tmp = array[j];  //交换
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                    flg = true; //进行了交换,代表没有完全有序
                }
            }
            if (flg == false) {
                break;
            }
        }
    }
    public static void main(String[] args) {
        int[] array = {1,34,37,5,6};
         bubbleSort(array);
         System.out.println(Arrays.toString(array));
    }

结果:
在这里插入图片描述

1.4.6.数组逆序

 public static void reverse(int[] array){
        int i = 0;//第一位
        int j = array.length-1; //最后一位
        while (i < j) {
            int tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
            i++;
            j--;
        }
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        reverse(array);
        System.out.println(Arrays.toString(array));
    }

1.4.7.数组数字排列

给定一个整型数组,将所有的偶数放在前半部分,将所有的奇数放在后半部分

public static void func2(int[] array){
        int i = 0;
        int j = array.length-1;
        while (i < j) {
            //判断偶数
            while (i < j && array[i]%2 == 0) {  //若不加i<j,则i可能一直++
                i++;
            }
            //判断奇数
            while (i < j && array[j]%2 == 1) {  //若不加i<j,则j可能一直--
                j--;
            }
            int tmp = array[i];//当i遇上奇数,j遇上偶数则互换
            array[i] =array[j];
            array[j] = tmp;
        }
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        func2(array);
        System.out.println(Arrays.toString(array));
    }

1.4.8 数组拷贝

方法1:

 public static int[] copy(int[] array){
        int[] copy = new int[array.length];//定义一个新数组存放拷贝后的元素
        for (int i = 0; i < array.length; i++) {
            copy[i] = array[i];
        }
        return copy;
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        //int[] ret = copy(array);
        System.out.println(Arrays.toString(copy(array)));
    }

方法2: 利用操作数组的工具类

 public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        int[] ret = Arrays.copyOf(array,array.length);//(需要拷贝的数组,拷贝的新的长度)
        System.out.println(Arrays.toString(ret));
    }

方法3:克隆

public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        int[] ret =array.clone(); //克隆-->array指向的对象的副本
        System.out.println(Arrays.toString(ret));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值