数组
1. 数组概述
-
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
-
数组本身就是对象,Java中对象是在堆中的,因此数组无论数组保存原始类型还是其他对象类型,数组对象本身就是在堆中的。
-
数组元素相当于对象的成员变量。
2. 数组声明创建
1)声明数组首选方法: 变量类型[] 变量名 =
变量类型 变量名[] =
2)Java中使用new操作符来创建数组,语法:
dataType[] arrayRefVar = new dataType[arraySize]
3)初始化:
①静态初始化:创建+赋值
②动态初始化:包含默认初始化,初始全为0
③数组的默认初始化
int[] nums;//1. 声明数组 nums = new int[10];//2. 创建数组 //3. 给数组元素赋值 nums[0]=0; nums[1]=1; //遍历数组 for (int i = 0; i < nums.length; i++) { System.out.println(nums[i]); }
//静态初始化:创建+赋值 int[] a ={1,2,3}; Man[] mans = {new Man(),new Man()}; //动态初始化:包含默认初始化 int[] b = new int[10];//全为0 b[0] = 10;
4)数组边界:
下标的合法区间:[0,length-1],如果越界就会报错。
ArrayIndexOutOfBoundsException(数组下标越界异常)
3. 数组使用
1)For-Each循环
arrays.for
//无下标 for (int array : arrays) { System.out.println(array); }
2)数组作方法入参
public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } }
3)数组作返回值
public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; int[] reverse = reverse(arrays);//新建数组存放返回值 printArray(reverse); } public static int[] reverse(int[] arrays){ int[] result = new int[arrays.length]; for (int i = 0; i < arrays.length; i++) { result[i] = arrays[arrays.length - i - 1]; } return result; }
4. 多维数组
多维数组可以看成数组的数组
//4行2列 /* 1,2 array[0] 2,3 array[1] 3,4 array[2] 4,5 array[3] */ int[][] array = {{1,2},{2,3},{3,4},{4,5}}; printArray(array[0]);
5. Arrays类
1)给数组赋值:fill方法;
2)给数组排序:sort方法升序;
3)比较数组:通过equals方法比较数组中元素值是否相等;
4)查找数组元素:通过binarySearch方法对排序好的数组进行二分查找法操作;
5)Arrays类中有许多方法,需要时进行查找使用即可。
public static void main(String[] args) { int[] a = {1,2,33,456,3,555,1234}; //打印数组元素Arrays.toString(a) System.out.println(Arrays.toString(a)); //数组进行排序(升序):Arrays.sort(a) Arrays.sort(a); System.out.println(Arrays.toString(a)); //数组填充 Arrays.fill(a,0); }
冒泡排序:
-
比较数组中,两个相邻的元素,如果第一个数比第二个数大,则交换他们的位置;
-
每一次比较,都会产生出一个最大/小的数字;
-
下一轮则可以少一次排序;
-
一次循环,直到结束。
public static void main(String[] args) { int[] a = {1,2,55,77,11,345,67}; int temp = 0; for (int i = 0; i < a.length - 1; i++) { boolean flag = false; for (int j = 0; j < a.length - i - 1; j++) { if (a[j]>a[j+1]){ temp = a[j+1]; a[j+1] = a[j]; a[j] = temp; flag = true; } } if (flag == false){ break; } } System.out.println(Arrays.toString(a));
6. 稀疏数组——数据结构
-
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
-
稀疏数组的处理方式:
-
记录数组一共有几行几列,有多少个不同值;
-
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而减小程序的规模。