数组

数组:

什么是数组

  • 数组是具有相同的数据类型且按照一定的次序排列的一组变量的集合体。
  • 用一个变量来表示一组数据。
  • java中数组在内存中分配一段连续的空间,这段空间中存储数据的个数是固定的

数组的特点

  • ​ 数组是序排列的
  • ​ 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  • ​ 创建数组对象会在内存中开辟一整块连续的空间
  • ​ 数组的长度一旦确定,就不能修改。

使用数组的步骤

  • 定义数组
  • 为数组分配内存
  • 数组元素初始化
  • 使用

一维数组的声明与初始化

  • int num;//声明

    num = 10;//初始化

    int id = 1001;//声明 + 初始化

  • int[] ids;//声明

    //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行

    ids = new int[]{1001,1002,1003,1004};

    //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行

    String[] names = new String[5];

    int[] arr4 = {1,2,3,4,5};//类型推断

分配内存

  • 通过 new 来为数组分配内存空间

    数组名 = new 数据类型[数组长度]; eg: nums = new int[10];

    数据类型[] 数组名 = new 数据类型[数组长度]; eg: int[] nums = new int[10];

  • 注意:数组的长度一旦指定,就不能改变了

数组的属性

  • array.length
  • 说明:数组一旦初始化,其长度就是确定的。arr.length数组长度一旦确定,就不可修改。

遍历输出数组元素

//for循环遍历数组
for(int i = 0; i < nums.length; i ++){ 
    System.out.println(nums[i]); 
}
//for-each用法
for(int i : nums){ 
    System.out.prinln(i); 
}

for-each

        /*
         *  for-each  数组可以使用for-each循环
         *  
         *  for(变量 : 被循环的变量){ 
         *      // 代码块
         *  }
         *  
          *   每一次循环都会将 被循环的变量 的对应值赋值给 变量
         */
        for(int num : nums) { // 可以理解为 for 循环中加入 int num = nums[i];
            System.out.println(num);
        }

数组常见问题

  • 数组下标越界

    java.lang.ArrayIndexOutOfBoundsException 原因是下标使用不正确,下标应是从0~数组长度-

  • 空指针异常

    java.lang.NullPointerException 我们操作了一个为 null 的变量

  • 语法错误
    //因为声明数组时,是没有数组长度的。没有这种写法 
    int array1[3] = new int[]{1,2,3}; 
    //在数组声明时要有数组标识[],下面这种声明是声明一个int类型的变量。
    //在初始化时,数组的长度是根据初始化的情况来定的,不需要指定长度
    int array2 = new int[3]{1,2,3};
    //直接初始化数组,必须与声明写在一起
    int array3[];
    array3 = {1,2,3};

冒泡排序

  /**
  * 升序冒泡排序 
  * @param nums */ 
    public static void bubbleSort(int[] nums) { 
    //控制排序次数 
    for (int i = 0; i < nums.length - 1; i++) { 
        for (int j = 0; j < nums.length - 1 - i; j++) { 
            //如果前边的数大于后边的数,交换位置 
            if(nums[j] > nums[j + 1]) { 
                //定义临时变量存储值 
                int temp = nums[j]; 
                nums[j] = nums[j + 1]; 
                nums[j + 1] = temp; 
            } 
        } 
    } 
}

二维数组

如何理解二维数组?

  • 数组属于引用数据类型
  • 数组的元素也可以是引用数据类型
  • 一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组

二维数组的声明与初始化

        //静态初始化
        int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
        //动态初始化1
        String[][] arr2 = new String[3][2];
        //动态初始化2
        String[][] arr3 = new String[3][];
        //也是正确的写法:
        int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
        int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断

二维数组的遍历

//将二维数组遍历成一维数组 
for (int i = 0; i < nums1.length; i++) { 
//遍历输出一维数组 
    for (int j = 0; j < nums1[i].length; j++) { 
        System.out.print(nums1[i][j] + ","); 
    }
    //换行
    System.out.println(); 
}

评论