数组定义
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
- 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们
数组的声明和创建
初始化
package com.ling.java_base; public class Array { public static void main(String[] args) { int[] arr1; arr1 = new int[2]; arr1[0] = 1; arr1[1] = 2; } }
int[] arr1 = {1,2,3,4,5}
- 数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
- 数值型的元素默认是0,字符为null。
- 默认初始化
- 数据类型[] 变量名字 = {...}
- 在声明变量的时候同时进行赋值
- 静态初始化
- 数据类型[] 变量名字= new 数据类型[定义的数据大小]。
- 变量名[索引] = 值,来赋值
- 动态初始化
初始化时候的内存分配(先简单理解)
- 当对一个数组进行声明的时候,在将变量压进cpu的栈空间
- 当对数组进行赋值的时候,会在堆空间进行分配空间,如果没有赋值会设定成默认值
数组反转(小例题)
package com.ling.java_base; public class array02 { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; int[] arr2 = reverse(arr);//翻转 printArr(arr2);//打印 } public static int[] reverse(int[] arr){//数组进行翻转的函数,新建一个数组,然后在这个数组的第一个位置填入最后一个元素,第二个填入倒数第二个,以此类推 int[] arr2 = new int[arr.length]; for(int i = 0,j = arr.length- 1;i<(arr2.length); i++,j--){ arr2[i] = arr[j]; } return arr2; } public static void printArr(int[] arr){//打印数组的函数 for (int i : arr) { System.out.print(i + " "); } } }
二维数组
二维数组的定义
动态定义
int[][] arr = new int[2][2];//在栈中压进一个变量,在堆中开辟一个空间 arr[0][0] = 1;//对各个元素进行定义 arr[0][1] = 2; arr[1][0] = 3; arr[1][1] = 4;
静态定义
int[][] arr = {{1,2},{3,4}};
Arrays类
- fill方法
- 给数组赋值
- sort方法
- 通过sort方法,按升序
- equals方法
- 通过equals方法比较数组中元素值是否相等
- binarySearch方法
- 通过binartSearch方法能对排序好的数组进行二分查找法操作
这些方法都可以通过查看文档来查看怎么使用(参数,作用,返回值)
稀疏数组
- 当一个数组中有许多重复的值,而只有一些数组有意义的时候,可以使用稀疏数组来节省空间
- 得到的稀疏数组:
- 第一行是 行数 列数 有意义的值个数
- 其余行是 行数 列数 值(有意义的值的坐标)
package com.ling.java_base; import javax.swing.*; import java.util.Arrays; public class Array05 { public static void main(String[] args) { int[][] test = {{1, 1, 3}, {2, 2, 6}}; int[][] original_Array = createArray(11, 11, test); printArray(original_Array); System.out.println("=================================="); int[][] zipArray = createZipArray(original_Array); printArray(zipArray); System.out.println("=================================="); int[][] retu = retu(zipArray); printArray(retu); } /** * 这是用于创建初始化列表的方法 * * @param r 生成的行数 * @param c 生成的列数 * @param workValue 数组中有效的值 * @return 返回一个原始数组 */ public static int[][] createArray(int r, int c, int[][] workValue) { int[][] original_Array = new int[r][c]; for (int[] ints : workValue) { original_Array[ints[0]][ints[1]] = ints[2]; } return original_Array; } public static void printArray(int[][] array) { //打印出二数组 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j] + " "); } System.out.println(""); } } public static int[][] createZipArray(int[][] originalArray) { //生成压缩数组 int num = 0; int work_index = 0; int zip_index = 1; int[][] workArray = new int[10][3]; for (int i = 0; i < originalArray.length; i++) { for (int j = 0; j < originalArray.length; j++) { if (originalArray[i][j] != 0) { num++; workArray[work_index][0] = i; workArray[work_index][1] = j; workArray[work_index][2] = originalArray[i][j]; work_index++; } } } int[][] zipArray = new int[num + 1][3]; zipArray[0][0] = originalArray[0].length; zipArray[0][1] = originalArray.length; zipArray[0][2] = num; for (int i = 0; i < num; i++) { zipArray[zip_index] = workArray[i]; zip_index++; } return zipArray; } public static int[][] retu(int[][] arr){ //还原数组 int[][] retuArray = new int[arr[0][0]][arr[0][1]]; for(int i = 1;i < arr.length;i++){ int r = arr[i][0]; int c = arr[i][1]; int v = arr[i][2]; retuArray[r][c] = v; } return retuArray; } }