Java数组、动态数组、二维数组的应用

一、认识数组

1、容器的概念

​ 用于存储数据的一块内存称为容器,生活中有很多容器,例如水杯,衣柜,以及存放“东西”

​ 存放在容器中的数据,称为“元素”

2、为什么会存在数组呢?

​ 假如现在存储全班同学的成绩,全班40人,按照定义变量的思维,需要定义40个double类型的数据变量,每次从40个变量中找一个变量,操作很麻烦,java中可以定义以和数据类存放40个人的成绩,使用数据类型存储

​ 数组定义:它是相同数据类型的有序集合

3、数据特点

  • 数组的长度固定(数据的长度一旦声明,就不能改变)

  • 数组中存储的元素数据类型必须相同

  • 数组的元素 通过下标访问,且下标默认从0开始

  • 数组类型属于引用数据类型,数组的元素类型 既可以是基本数据类型也可以是引用数据类型

4、数组的创建方式

方式一

数组存储的数据类型 [] 数组名 = new 数组存储的数据类型 [长度]

详解:

​ 数组存储的数据类型:创建数组容器中可以存储说明数据类型(基本数据类型、引用数据类型)

​ []:表示数组

​ 数组名:给数组起名字,遵循标识符规则

​ new:创建数组的关键字

​ [长度]:数组的长度,这个长度定义后不可改变 可表示为array.length

例如

int [] arr = new int[3];

new出来的空间在堆内存中,数组是引用数据类型,存在内存地址

内存解析:在堆内存中开票一段连续的3个长度的int类型的内存空间,并由arr变量指向这块内存地址(换句话说rr输出就是这个内存的地址)

方式二

数据类型 [] 数组名 = new 数据类型 []{元素1,元素2,元素3.。。。。 }

这里的数组长度就是元素的个数自动分配大小

int[] arr = new int[]{99 .97 .95};
或者
int arr [] = new int[]{90,95,96,94}

方式三

数据类型 [] 数组名 = {元素1,元素2,元素3.。。}

注意:这里的元素类型必须满足数组的元素数据类型

char [] arr = {'a','b','c'}
或者
char arr [] = {'a','b','c'} 

5、数组的访问

​ 数组的访问通过索引访问

索引(下标):每一次数组的元素都有一个编号,这个编号从0开始,这个编号称为数组的索引,通过数组名[索引]访问到数组的元素

例如:访问数组的第二个元素:数组名[1];

数组的长度:数组的长度声明以固定,访问数组的长度:数组名.length

​ 数组的最大索引 = 数组长度 - 1

数组元素的赋值:通过索引可以给元素赋值 数组名[索引] = 值 将数据赋值给指定索引的元素

二、动态数组

1、数组的定义

​ 用于存储相同数据类型的一组连续的存储空间

2、 数组的特点

​ 数组的长度一旦定义,则不可改变

​ 访问数组元素需要通过下标(索引)访问,下标从零开始

​ 数组是引用数据内存,内存分布在堆内存中,数组的变量存储在内存地址

3、动态数组

​ 由于数组的长度定义后不能改变,所谓“动态数组”是可以增加数据长度,所以java实现动态数组是改变数组变量指向不同的内存地址,本质并没有将数组的长度改变

动态数组的本质:将内存空间的改变,以及指向数组内存地址的改变

操作1:数组添加新元素,可添加在最后面,也可以添加到指定位置

  /**
     * 添加元素,(添加到末尾)
     */
    public static int[] addEle(int []array ,int num){
        //初始数组   添加的元素
//        int array [] = {10,9,3,2,1};
        //1、创建临时数组的长度
        int  []  tempArray = new int[array.length+1];
        //2将目标数组的元素 copy到 临时数组的内存中
        for (int i=0;i<array.length;i++){
            tempArray[i]=array[i];
        }
        //3、将添加的元素放入临时数组中
        tempArray[tempArray.length-1]=num;
        //4、将目标数组的地址  指向  临时数组的地址
        array=tempArray;  //由于tempArray 是局部变量  方法执行完内存自动回收
                        //   如果不返回  没有地址指向tempArray的内存
                        //   如果返回并接受  说明这块内存地址仍然使用
        return array;
        }

    /**
     * 将元素num 添加到指定index的位置
     * @param args
     */
    public static int [] addEle(int [] arr,int num,int index){
        //1、创建临时数组的大小
        int [] tempArray = new int[arr.length+1]
        //2、便利arr
        for(int i=0;i<=arr.length;i++){
            //如果i<index
            if (i<index){
                tempArray[i]=arr[i];
            }else if (i==index){
                tempArray[i]=num;
            }else{
                //i>index
                tempArray[i]=arr[i-1];
            }
        }
        //赋值
        arr=tempArray;
        return arr;

    }
    public static void main(String[] args) {
        //扩容数组
//        int [] array = {5,4,3};
//        //动态扩容一个
//        array=addEle(array,2);
//        for (int i=0;i<array.length;i++){
//            System.out.println(array[i]);
//        }
//        System.out.println(array.length);

        //插入到指定下标
        int[]arrary={10,9,3,2,1};
        arrary = addEle(arrary,5,5);
        System.out.println(Arrays.toString(arrary)); // 直接输出数组的每一个元素
    }

操作2:可删除元素 删除指定下标元素

 /**
     * 删除指定下标的数组元素,删除后面的向前缩进一个
     */
    public static int [] Ele(int arr[],int index){
        //1、创建一个新的临时数组
        int tempArray [] =new int[arr.length-1];
        for (int i=0;i<arr.length-1;i++){
            if (i<index){
                tempArray[i]=arr[i];
            }else {
                tempArray[i]=arr[i+1];
            }
                //i=3  temparray[3]=arr[4];
                //i=4  temparray[4]=arr[4+5];
        }
        //赋值
        arr=tempArray;
        return arr;
    }

    public static void main(String[] args) {
        int array []={10,5,4,7,8,6};
        array=Ele(array,3);
        System.out.println(Arrays.toString(array));
    }

三、二维数组

1、二维数组定义

​ 在一维数组中定义每一个元素也是一个数组元素,这样的数组称为“二维数组”多维数组就是在一维数组上再次定义二维数组或 三位数组 等。

  一维数组定义  
  int [] array = { 1, 2 ,  3}
  二维数组定义
   //定义三个长度的二维数组,其数组的每一个元素是一个一维数组 
 int [][] arrays = {{} ,{} ,{}} ;  
 或者
 int [][] arrays = new int [3][2];  // 左边的【】中表示二维数组的长度  ,其中2可以省略,3 不能省略 
  // 注意: 等号左边有几个【】 就表示几维

  //  1、定义二维数组
        int [][] array;
        //  定义时给二维数组赋值  3个长度的二维数组  里面的一维数组的长度不一定相等
        int [][] array2 = {{1,2,3},{4,5},{7,8}};
        //  定义时只指定大小 不给定初始值
        int [][] array3 = new int[3][]; // 等价 {{},{},{}}
       // array3[0][0]=1; // 赋值时 空指针异常 ,因为里面的一维数组是空的

        //定义一个3个长度的二维数组,里面的元素长度是2
         int array4 [][] = new int[3][2];
         //给元素赋值
        array4[0][0] =1;

  // 输出二维数组中的所有元素
        for(int i=0;i<array4.length;i++){
           // System.out.println(array4[i]);
            for(int j=0;j<array4[i].length;j++){
                System.out.println(array4[i][j]);
            }
        }

2、二维数组的应用

1、定义5*5的矩阵,计算最大值最小值

2、五子棋游戏

原文地址:https://www.cnblogs.com/qzwx63/p/13797746.html