概念
数组:用来存储数据的,多个变量组成的一个整体,便于批量操作数据。
元素:每一个数组中的变量空间。
索引:每个元素的编号,从0开始,又叫角标。
长度:数组中可以存储多少个数据,用length表示。
声明和赋值
①动态初始化:
数据类型[] 数组名称 = new 数据类型[长度]
package com; public class Test { public static void main(String[] args) { //动态定义数组 String[] a = new String[5]; //遍历 for (int i = 0; i < 5; i++) { System.out.println(a[i]); } } } null null null null null Process finished with exit code 0
注意:
1>由于动态初始化,开辟空间之后,赋的是数组数据类型的默认值,如String类型的数组,默认值是null,int类型的数组,默认值是0
2>两种写发都对:int[] a 和 int a[]
②静态初始化:
数据类型[] 数组名称 = new 数据类型[] {数值1,数值2,数值3}
package com; public class Test { public static void main(String[] args) { //静态定义数组 int[] b = new int[]{1,2,3,4,5}; //简写形式 int[] c = {1,2,3,4,5}; //遍历 for (int i = 0; i < 5; i++) { System.out.println("静态定义" + b[i] +" 简写形式"+ c[i] ); } } } 静态定义1 简写形式1 静态定义2 简写形式2 静态定义3 简写形式3 静态定义4 简写形式4 静态定义5 简写形式5 Process finished with exit code 0
注意:
1>静态初始化,在创建数组的时候就被赋值了;
2>new 后面的那个[]里面不需要写值,根据后面{}里的数据值决定长度。
③静态初始化的简写形式:
数据类型[] 数组名称 = {数值1,数值2,数值3}
(代码同②)
注意:
1>声明与赋值不能分开写
遍历
采用for循环的形式。
常见异常
①角标越界异常:访问到了数组索引之外的空间。
ArrayIndexOutOfBoundsException
②空指针异常:对象为null
NullPointerException
数组内存图
package com; public class Test { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; } }
1.当main方法开始压栈执行时,在main方法中开辟arr引用变量空间;
2.在堆中创建对象并初始化,若是动态形式定义的数组,数组中的默认初始值是数组数据类型的默认值;此时是静态数组的简写形式,所以里面存放的就是初始值;
3.当数组对象初始化完毕后,将内存首地址赋值给引用变量arr。
注意:
arr称为引用变量,空间在栈中开辟,而真实的数组对象是在堆中开辟。
冒泡排序
重复走访要排序的元素,依次比较相邻的两个元素,若是升序排,较大的元素会继续与下一个元素比较,同理重复的进行每次都用较大的去和下一个相邻的元素比较,直到没有相邻元素为止,这样每一趟都会遍历出一个最大值。降序同理,每趟遍历出一个最小值。
package com; import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = {-19,23,45,14,21,-40}; //外层控制比多少趟 for (int i = 0; i < arr.length; i++){ for (int j = 0; j < arr.length-1; j++){ //当第一个元素大于第二个就交换位置 升序 if (arr[j] > arr[j+1]){ int max = arr[j]; arr[j] = arr[j+1]; arr[j+1] = max; } } } System.out.println(Arrays.toString(arr)); } } [-40, -19, 14, 21, 23, 45] Process finished with exit code 0
二维数组
多维数组:Java中没有多维数组的概念,所谓多维数组就是数组套数组。
二维数组的声明与赋值
动态初始化:
数据类型[][] 数组名称 = new 数据类型[长度1][长度2] 长度2可以省略不写,但是省略后需要先赋值再使用。
静态初始化:
数据类型[][] 数组名称 = new 数据类型[][]{ {},{},{}}
简写形式:数据类型[][] 数组名称 = {{},{},{}}
package com; public class Test { public static void main(String[] args) { //三行四列 动态初始化 int[][] arr = new int[3][4]; for (int i = 0; i < arr.length; i++){ for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j]); } System.out.println(); } } } 0000 0000 0000 Process finished with exit code 0