java 数组

一维数组

数组相当于一个容器,可以存放一组相同类型的数据运算的时候有很多数据参与运算,那么首先需要做的是什么.不是如何运算而是如何保存这些数据以便于后期的运算,那么数组就是一种用于存储数据的方式,能存数据的地方我们称之为容器,容器里装的东西就是数组的元素, 数组可以装任意类型的数据,虽然可以装任意类型的数据,但是定义好的数组只能装一种元素, 也就是数组一旦定义,那么里边存储的数据类型也就确定了。

数组声明规范

元素类型[] 数组名 = new  初值类型[元素长度]

如 int[] array = new int[5];//声明长度为5的数组,长度一旦声明,不可在改变

元素类型[] 数组名 = new 初值类型[]{元素1,元素2,....}

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

堆内存的特点

1,有初始值,2有内存地址3,堆内存垃圾回收机制

数组中取一个值  数组名[下角标]

array=null;//array指向一个空的地方
NullpointerException空指针异常访问了一个可能不存在的区域

数组遍历

注意数组的问题都和遍历有关

//随机10个数随机区间[15,150]
        //1,十个数放入数组中 2打印最大值
        //注意:数组方面的问题都和遍历有关

``` python

int[] array = new int[10];
        for (int i = 0; i < array.length; i++) {
            int num = (int)(Math.random()*(150-15+1)+15);
            array[i]=num;
        }System.out.println(Arrays.toString(array));
        int max=0;
        for (int i = 0; i < array.length; i++) {
            if (max<array[i]) {
                max=array[i];
            }
        }
        System.out.println("max"+max);

```

函数名字按照小驼峰规则编写

根据索引找元素

实例:封装一函数,传入数字一,则返回星期一

```

public static char findNumber(int a) {
        // 需要一个容器吧中文数据保存下来,按传入数字,查找对应值
        
        char[] array = new char[] { '一', '二', '三', };
        return array[a - 1];
        
    }

```

根据元素找索引

实例:定义一个数组,数组的值分别为3,6,11,22

在数组中查找11的位置

public static int findIndex(int number,int array[] ){

int index = -1;

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

if(array[i] == number){

index = i;

 break;
            }
        }return index;
    }

public static void main(String[] args) {

int[] array = new int[] {3,6,11,12,25,3};
        int d = findIndex(3,array);
        System.out.println(d);}

数组元素反转

```  python

public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = new int[] {1,2,3,4,5,6,7,8,9};
        //num 表示 交换的次数
        int num = array.length/2;
        for (int i = 0; i < num; i++) {
            //array[i]和array[array.length-1-i]
            int temp = 0;
            temp = array[i];
            array[i] = array[array.length-1-i];
            array[array.length-1-i] = temp;
            
        }
        System.out.println(num);
        System.out.println(Arrays.toString(array));

```

实际开发中,已系统函数为准Arrays.sort(数组名)

    public static void main(String[] args) {
        int[] array = new int[] { 1,2,3,9,5,6,7 };
        // 该方法无返回值,实际上这个方法操作的是原数组
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
    }

冒泡排序

核心思想:相连的两个数比较大小,并交换位置

*传入的数组相当于将数组的首地址传递进去,拿到地址,就可随便更改数组元素的位置
 *这在sort函数中 就是对原数组进行的操作

//外层循环控制比较的回合数,内层比较每回合次数
        //外循环-1 避免数组越界
        //内循环-i-1 一趟比较确定一个数 意味着可以少比一次

封装一个函数 ,对数组冒泡排序

public static void sort(int[] array) {
        for (int i = 0; i < array.length-1; i++) {
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j]> array[j+1]) {
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1]=temp;
                }
            }System.out.println(Arrays.toString(array));
        }System.out.println(Arrays.toString(array));
    }

选择排序

选择一个数与下一个数比较(用这个数和数组中的每一个数进行比较)

public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array = new int[] {1,2,3,4,5};
        //外循环减一,最后同一个数不用比较
        //内循环j的初是指从1开始
        //因为array[0]和array[0]不用比较
        //内循环加i:每一次比较确定一个数
                //每次都可以少比一个数
        for (int  i= 0;  i< array.length-1; i++) {
            for (int j = 0+1; j < array.length; j++) {
                //交换谁和谁
                //array[j]
                if(array[j] < array[i]) {
                   int temp = array[j];
                    array[j] = array [i];
                    array[i] = temp;
                }
                
                
            }
        }System.out.println(Arrays.toString(array));

    }


折半查找

int min = 0;
        
        int[] array = new int[] {1,2,3,4,5,6,11};
        //生命角标
        int max = array.length - 1;
        int mid = (max + min)/2;
        int key =11;
        //声明查找值
        //循环查找 循环里顶要有折班的操作
        //为什么使用while 阴我已明确知道循环什么时候停止
        //key 和中建交表的值比较,如相等循环停止
        while (key != array[mid]) {
            if (key > array[mid]) {
                min = mid + 1;
            } else if (key <array[mid]) {
                max = mid - 1;
            //如果数组中没有这个数会早成死循环,需要出口停止程序
            }mid = (min + max) /2;
            if (min > max) {
                mid = -1;
                break;
            }
        }
        System.out.println(mid);
        

    }


二维数组

二位数组也是容器 ,保存的是多个一维数组,并且是相同类型的一维数组

声明方式:数组类型[][] 数组名 = 初值

int[][] array = new int [1][1];

int[][] array = new int [][]{

{1,2,3,4},{4,5,6},{7,8,}

};

遍历二维数组

public static void main(String[] args) {
        // TODO Auto-generated method stub
        //声明了一个有2个一维数组且每个一维数组是三个元素的二维数组
        //声明时 需要把几个一维数组声明出来
        int[][] array = new int[3][8];
        array [0][0] = 8;
        System.out.println(array[0][0]);
        
        //声明一个有三个一维数组并且每个一维数组中有4个元素哦二维数组
        int[][] arra = new int [][] {
            {1,2,3},{5,6,7,8},{5,1}
        };
        //遍历二维数组
        //array.length 二位数组长度指的是有几个一维数组
        for (int i = 0; i < arra.length; i++) {
            for (int j = 0; j < arra[i].length; j++) {
                System.out.print(arra[i][j]);
            }System.out.println("");
        }

    }





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值