java数组的使用

2018-12-05  本文已影响0人  数据工程师从入门到放弃

[TOC]

本单元目标

1、数组的特点和好处
2、数组的使用步骤 ★
3、数组的基本使用 ★
        求和、求最值、查找、排序
4、数组的复杂使用 ★
        赋值、反转
5、数组的高级使用 
        增删改查
6、二维数组

1、数组的特点和好处

1.1、概念

数组:其实就是一个容器,和变量很像。变量只能保存一个数,而数组可以保存一组数.

1.2、好处

1、同时开辟多个空间,语句更加简洁,且提高效率
2、分类存储,而且数组中的空间都是连续的,所以查找比较方便

1.3、特点

1、数组是多个相同类型数据的组合,实现对这些数据的统一管理
2、数组中的元素可以是任何数据类型,包括基本类型和引用类型(定义)
3、数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量
    数组名又称为对象名或引用名

注意:引用类型的变量名(也叫对象名)存放在栈中,值(也叫对象)存放在堆中!
     基本类型的变量名和值都存放在栈中
image

1.4、数组的四要素

1、数组类型
2、数组名(对象名或引用)
3、数组元素(多个)
4、下标(从0开始,到数组的长度-1)

访问数组的元素,不是仅仅通过数组名,而是通过数组名+下标

语法:score[下标]

2、数组的使用步骤

2.1、数组的动态初始化

class ArrayDemo1 
{
    public static void main(String[] args) 
    {
        //步骤1:声明(仅仅告诉jvm要开辟房间保存多个元素)
        //语法:数据类型[] 数组名;或 数据类型 数组名[];
        int[] arr;

        //步骤2:开辟空间(在堆中开辟指定长度的空间,并且系统自动为每个成员赋予初始值)

        //语法:数组名 = new 数据类型[长度];

        /*
            int 0
            double 0.0
            char \u0000
            boolean false
            String null

        */
        arr = new int[5];

        //可以合二为一
        int[] arr2 = new int[5];

        //步骤3:手动赋值
        arr[0] = 100;//为数组中的第一个成员赋值
        arr[1] = 300;//为数组中的第二个成员赋值
        arr[2] = 900;//为数组中的第三个成员赋值


        //arr[5] = 10000; ArrayIndexOutOfBoundsException

        //arr={1,2,3};错误
        //步骤4:使用
        System.out.println(arr);//[I@7852e922 相当于 地址号
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[1]);

    }
}
//此类用于演示数组的动态初始化——赋的值有规律
class Test_
{

    public static void main(String[] args) 
    {
        //1.声明并开辟空间
        int[]  arr = new int[5];
        

        //2.赋值
        for(int i=0;i<arr.length;i++){
            arr[i] = (int)(Math.random()*100+1);

        }
        //3.使用
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);

        }

    }

}
1、声明
数据类型[] 数组名;或
数据类型 数组名[];
2、开辟空间
数组名 = new 数据类型[长度];//长度必不可少

3、手动赋值
数组名[下标] = 值;

4、使用(打印、运算、判断等)
System.out.println(数组名[下标]);

注意事项:

①数组的元素如果不赋值,也有默认值
int 0
double 0.0
char \u0000
boolean false
引用类型 null

②访问数组的元素时,下标必须在0——长度-1 的范围内,否则报数组下标越界的异常
③数组的长度,可以通过 数组名.length表示,提高代码的维护性
④数组的赋值和使用,往往可以通过搭配for循环一起操作

for(int i=0;i<数组名.length;i++){
    //每一个元素表示为:数组名[i]
}

案例:
​ 求一个班级10名同学的平均分

import java.util.Scanner;

//此类用于演示数组的动态初始化——赋的值有规律
class Test_
{

    public static void main(String[] args) 
    {
        Scanner intput = new Scanner(System.in);
        
        double[] scores = new double[10];
        
        for(int i=0; i<scores.length;i++) {
            
            scores[i] = intput.nextDouble();
            
        }
        
        double sum=0;
        for(int i=0;i<scores.length;i++) {
            sum += scores[i];
        }
        
        double mean = sum /scores.length;
        
        System.out.println(mean);
    }

}

2.2、数组的静态初始化

步骤1:声明并初始化
    语法:数据类型[] 数组名 = new 数据类型[]{值,值,值};
    或    数据类型[] 数组名 = {值,值,值};

    int[] arr = {3,4,5,6,100};
    //int[] arr2 = new int[] {3,4,5,6,100};
    
‘A’+1 转换为66
(char)('A'+1) 转为B


步骤2:使用
for(int i=0;i<数组名.length;i++){
    //每一个元素表示为:数组名[i]
}

3、数组的基本使用

3.1、数组的最值

class ArrayUtils1 
{
    public static void main(String[] args) 
    {

        //1.声明并初始化
        int[] arr = new int[]{5,4,3,6,7,1};

        //2.使用:求最大值

        //①定义一个max,初始化为第一个元素
        int max = arr[0];
        int maxIndex = 0;//记录最大值的下标
        //②车轮战术,进行和max的pk

        for(int i=1;i<arr.length;i++){
            if(arr[i]>=max){
                max=arr[i];
                maxIndex = i;

            }

        }

        //③获取max
        System.out.println("最大值:"+max+",下标:"+maxIndex);

    }
}

3.2、数组的查找

class ArrayUtils1_2 
{
    public static void main(String[] args) 
    {
        Scanner input = new Scanner(System.in);
        //1.声明并初始化
        String[] names = {"白眉鹰王","青易斧王","金毛狮王","紫衫龙王"};

        //2.查找

        System.out.println("请输入你要查找的名:");
        String search = input.next();

        //----------------核心的查找------------

        /*
            查找:线性查找、二分查找
            线性查找:依次将数组中的元素提取出来和要查找进行匹配
            二分查找:要求待查找的数组已经排好序,查找效率较高


        */
        boolean flag = false;
        for(int i=0;i<names.length;i++){
            if(names[i].equals(search)){//找到了
                System.out.println("找到了,下标是:"+i);
                flag = true;
                break;
            }

        }
        if(!flag){

            System.out.println("没找到");
        
        }
    }
}

3.3、数组的排序

image
//冒泡排序:每次比较相邻两个数 小的交换到前面 每轮结束后最大的数交换到最后
 
class ArrayUtils1_3 
{
    public static void main(String[] args) 
    {

        int[] arr = {2,3,4,1,5};
        //排序
        /*
            i   j       
            0   0       arr[0] vs arr[1]
                1       arr[1] vs arr[2]
                2       arr[2] vs arr[3]
                3       arr[3] vs arr[4]

        */

        for(int i=0;i<arr.length-1;i++){//外层循环。 i:控制轮数
            //循环操作:每一轮发生的事情
            for(int j=0;j<arr.length-1-i;j++){//内层循环。j:控制比较的次数
                //循环操作:每一次发生的事情(比较)

                if(arr[j]<arr[j+1]){
                    //交换两个相邻元素
                    int temp = arr[j];
                    arr[j]  = arr[j+1];
                    arr[j+1] = temp;

                }
            }
        }

        //打印
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"\t");

        }
        System.out.println();
    }

}

4、数组的复杂使用

4.1、数组的赋值

image
基本类型的赋值:

    int a = 10;
    int b = a;//赋值
引用类型的赋值:

    int[] arr1={1,2,3};
    int[] arr2=arr1;//赋值

特点:
    基本类型的赋值,赋的是值(内容),其中一个变量对其更改不影响另外一个
    引用类型的赋值,赋的是地址,两个引用共同指向一个地址(对象),所以其中一个引用对其更改影响另外一个
    //注意:如果希望引用类型赋值时,只赋内容,则可以使用循环赋值的方式,语法:

    int[] array2 = new int[array1.length];
    for(int i=0;i<array2.length;i++){
        array2[i] = array1[i];

    }

4.2、数组的反转

    方式一:

    for(int i=0;i<arr.length/2;i++){
        //交换两个数   i vs arr.length-1-i
        int temp = arr[i];
        arr[i] = arr[arr.length-1-i];
        arr[arr.length-1-i] = temp;

    }

    方式二:
    //①创建一个新数组,长度=arr.length
    int[] newArr = new int[arr.length];
    //②逆序赋值
    /*
    i
    0   arr.length-1
    1   arr.length-2

    */
    for(int i=0,j=arr.length-1;i<arr.length;i++,j--){
        newArr[j]=arr[i];

    }
    //③将新数组的地址赋值给arr
    arr=newArr;

5、数组的高级使用

5.1、数组的添加

    //----------------具体的添加业务----------
        //①新建一个数组,长度=arr.length+1
        int[] newArr = new int[arr.length+1];

        //②依次为新数组的元素赋值
        for(int i=0;i<arr.length;i++){
            newArr[i] = arr[i];
        }
        //③将add赋值到新数组的空位上
        newArr[newArr.length-1] = add;

        //④将newArr的地址赋值给arr
        arr = newArr;
        System.out.println("添加成功!");

5.2、数组的插入

class Test_
{

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        int[] arr = {2,3,1,4,6};
        
        for(int i=0;i<arr.length;i++) {
            System.out.print(arr[i]+"\t");
        }
        
        int add = input.nextInt();
        
        int index = input.nextInt();
        
        //1 创建一个新数组 长度 = arr.length+1
        int[] new_arr = new int [arr.length+1];
        //2 循环赋值
        for(int i=0;i<arr.length;i++) {
            new_arr[i] = arr[i];
        }
        //3 循环后移
        for(int i=new_arr.length-1;i>index;i--) {
            new_arr[i] = new_arr[i-1];
        }
        //4 将新元素赋值到index位置上
        new_arr[index] = add;
        
        // 5 将new的数组赋值给arr
        arr = new_arr;
        
        for(int i=0;i<arr.length;i++) {
            System.out.print(arr[i]+"\t");
        }
    }

}

6、二维数组

6.1、理解

二维数组其实就是 一维数组的组合,也就是一维数组的定义类型又为一维数组

int[][] num;
int[] num[];
int num[][];

6.2、使用步骤

方式一:动态初始化


​ 1.声明

数据类型[][] 数组名;或
数据类型 数组名[][];
数据类型[] 数组名[];

2.开辟空间
情况1:固定列数
数组名 = new 数据类型[行数][列数];
情况2:不固定列数
数组名 = new 数类型[行数][];
3.赋值
情况1:固定列数
for(int i=0;i<nums.length;i++){//i:行数
        
        for(int j=0;j<nums[i].length;j++){//j:列数
            nums[i][j]=值;
        }

    }
情况2:不固定列数
for(int i=0;i<nums.length;i++){//i:行数
        nums[i]=new 数据类型[长度]; //开辟空间
        for(int j=0;j<nums[i].length;j++){//j:列数
            
            nums[i][j]=值;
            }
    }

方式二:静态初始化

1.声明并初始化

数据类型[][] 数组名={{},{},{}};
或
数据类型[][] 数组名=new 数据类型[][]{{},{},{}};

2.使用(打印、求和、最值)
for(int i=0;i<nums.length;i++){//i:行数
        
        for(int j=0;j<nums[i].length;j++){//j:列数
            System.out.print(nums[i][j]);
        }
    }

上一篇 下一篇

猜你喜欢

热点阅读