zoukankan      html  css  js  c++  java
  • 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、五子棋游戏

  • 相关阅读:
    Java数据类型
    Hadoop之MapReduce单词计数经典实例
    亲戚问你每月多少工资?程序员该如何机智回答
    MySQL进阶操作
    MySQL基础操作
    Redis安装教程
    希尔排序(Shell Sort)
    插入排序(Insertion Sort)
    javascriptの循序渐进(一)
    css Animation初体验
  • 原文地址:https://www.cnblogs.com/qzwx63/p/13797746.html
Copyright © 2011-2022 走看看