@TOC
第一章、数组的概念介绍
1.1)数组的概念
①数组就是用来储存数据的容器,可以存储同一种类型的数据,是同一种数据类型的集合。实现对这些数据的统一管理。如果数组中存储的是基本类型数据,我就不能往里面存引用类型数据。数组中存储的是引用类型数据,我就不能往里面存基本类型数据。
②数组容器存储的可以是引用类型数据或者基础类型数据,但数组本身属于引用类型变量。
③数组是线性数据结构,有固定长度和大小的概念数组长度一旦确定了,就不可以改变
,我们称为:长度length。
④数组有索引的概念,数组中的元素从0开始编号,这个编号我们称为:下标index,因为是从0开始编号所以索引最大值为:length-1。
1.2)数组的初始化
以创建一个长度为5的int类型的数组举例
①动态初始化,初始化只确定元素个数,等需要时再添加元素
数组中保存的数据类型[] 数组的名字 = new 数组中保存的数据类型[存储的元素个数]
int[] arr = new int[5];
②静态初始化2,初始化的时候就确定 里面的元素
数组中保存的数据类型[] 数组名字 = new 数组中保存的数据类型[]{元素1,元素2,元素3,元素4,元素5};
int[] arr = new int [] {1,2,3,4,5};
③静态初始化2,初始化的时候就确定 里面的元素
数组中保存的数据类型[] 数组名字 = {元素1,元素2,元素3,元素4,元素5};
int[] arr = {1,2,3,4,5};
第二章、数组的使用
2.1)数组添加元素的方法/数组的赋值
在动态初始化后我们要单独为数组添加元素,也就是赋值操作。
①赋值操作,添加元素,设置元素值操作 ==> 数组名配合下标,注意:下标从零开始。
数组名[下标]=需要添加的元素;arr [0] = 1 ;
arr [1] = 2 ;
arr [2] = 3 ;
arr [3] = 4 ;
arr [4] = 5 ;
2.2)数组的遍历
①当我们需要查看数组里面的内容。最基础的是使用for循环遍历的方法查看
//遍历arr数组元素,打印元素内容看效果for(int i = 0;i <= arr.length - 1;i++){//数组名arr 配合下标i 获取元素值System.out.println(arr[i]);}
②使用do while循环遍历arr数组元素
//使用do while循环遍历arr数组元素,打印查看效果int j = 0;do{System.out.print(arr2[j] + " ");j++;}while(j <= arr2.length - 1);
2.3)数组排序
①数组之选择排序的升序
选择排序:从数组空间中选择第一个数据,和后面空间中的数据进行比较,比较完之后将最小的数据和当前的第一个空间中的数据进行互换位置。然后再选择第二个元素和除第一个空间中的数据进行比较,同样找出最小的数据,将两个空间中的数据的位置互换。后面的数据以此类推,一直到将所有的数据变成从小变大的数据为止
//定义arr数组
int[] arr = {11,22,33,44,55,66};//外层循环控制轮数
for(int i = 0;i <= arr.length - 2;i++){//内层循环控制每一轮执行的次数for(int j = i + 1;j <= arr.length - 1;j++){if(arr[i] > arr[j]){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}
②数组之冒泡排序的升序
冒泡排序(Bubble Sort):通过对排序序列从前向后(从下标较小的元素开始)依次比较相邻元素的值,若发现逆序则交换,使得值比较大的元素逐渐从前向后移动,就像水底下的气泡一样逐渐向上冒。
//定义arr数组
int[] arr = {11,22,33,44,55,66};//冒泡排序
for(int i = 0 ;i< arr.length -1; i++){for(int j = 0; j<arr.length-1-i; j++){if(arr[j]>arr[j+1]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}
2.4)数组的最小值
//定义arr数组
int[] arr = {11,22,33,44,55,66};int min = arr[0]; //假设0索引位置的元素是最小的for(int i = 0;i <= arr.length - 1;i++){if(arr[i] < min){//说明当前元素的内容小于min的值,为min重新赋值min = arr[i];}}
2.5)数组的反转
①第一种反转
//定义arr数组
int[] arr = {11,22,33,44,55,66};//反转
for(int i = 0;i < arr.length / 2;i++){int temp = arr[i];arr[i] = arr[arr.length - 1 - i];arr[arr.length - 1 - i] = temp;
②第二种反转
//定义arr数组
int[] arr = {11,22,33,44,55,66};for(int i = 0,j = arr.length - 1;i < j;i++,j--){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
③第三种反转
//定义arr数组
int[] arr = {11,22,33,44,55,66};//创建新的int数组,长度和原数组保持一致
int[] newArr = new int[arr.length];//反向遍历arr数组元素,赋值操作int i = arr.length - 1; //此处的i只能关联arr数组元素位置int j = 0; //此处的j关联的是newArr数组元素位置while(i >= 0){newArr[j] = arr[i];i--;j++;}}
2.6)数组中常见的异常
①空指针异常
//运行时异常: 空指针异常java.lang.NullPointerException//使用静态初始化创建数组
int[] arr2 = {11,22,33,44,55};//使数组为null,里面不在有数据
arr2 = null;//arr是null的情况下去使用他。null值无法进行调用的行为,
//一旦null值调用了类的成员(属性、方法),一定空指针!!!System.out.println(arr2[0]);
System.out.println(arr2.length);
②越界异常
//运行时异常: 数组下标越界异常
//java.lang.ArrayIndexOutOfBoundsException: 1000
//java.lang.ArrayIndexOutOfBoundsException: -10//先创建长度为10的数组
int[] arr = new int[10];//我把下标写成了1000,可是数组的长度并没有这么长,于是出现越界异常
System.out.println(arr[1000]);//我把下标写成了-10,可是数组的长度不可能为负数,于是出现越界异常
System.out.println(arr[-10]);
第三章、二维数组
本质上就是以数组作为数组元素的数组。
3.1)二维数组定义
①动态创建一个二维数组,包含五个一维数组,每个一维数组的长度尚未确定。
//创建二维数组
int[][] arr = new int[5][];
②动态创建一个二维数组,包含五个一维数组,每个一维数组里长度为5。
//创建二维数组对象
int[][] arr = new int[5][5];
③静态创建一个二维数组,包含3个一维数组,每个一维数组里长度为3,并且直接赋值。
int arr[][]={{1,2,3},{3,4,5},{5,6,7}};
3.2)二维数组的赋值
①直接赋值
//创建二维数组容器
int[][] arr = new int[3][3];//直接赋值到
arr[1][0] = 20;
arr[1][1] = 20;//打印输出
System.out.println("arr[0][0]=" + arr[0][0]);
System.out.println("arr[1][0]=" + arr[1][0]);
System.out.println("arr[1][1]=" + arr[1][1]); 打印结果如图:未赋值的默认为0。
②用for循环赋值
//创建二维数组对象
int[][] arr = new int[5][];//外层循环控制行数 定位二维数组的每个元素空间 for(int i = 0;i <= arr.length - 1;i++){//创建一维数组容器,关联当前二维数组的元素位置arr[i] = new int[i + 1];//内层循环控制当前行的列数 --> 为当前一维数组的每个元素进行赋值操作for(int j = 0;j <= arr[i].length - 1;j++){//赋值操作arr[i][j] = i + 1;//打印展示操作System.out.print(arr[i][j]);}//单独换行System.out.println();}
打印结果如图: