相同类型数据的有序集合
描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
dataType[] arrayRefVar;
dataType[] arrayRefVar = new dataType[arraySize] ;
public static void main(String[] args) { int[] nums; nums = new int[6]; nums[0] = 1; nums[1] = 2; nums[2] = 3; nums[3] = 4; nums[4] = 5; nums[5] = 6; //计算所有元素的和 int sum = 0; //获取数组长度:arrays.length for (int i = 0; i < nums.length; i++) { sum = sum + nums[i]; } System.out.println("总和为"+sum); }
// 结果 总和为21
public static void main(String[] args) { //静态初始化 int[] a = {1,2,3,4,5,6}; System.out.println(a[0]); //动态初始化 int[] b = new int[17]; b[0] = 16; System.out.println(b[0]); }
// 结果 1 16
普通的For循环
For-Each循环
数组作为方法入参
数组作返回值
public static void main(String[] args) { int[] arrays = {16,17,21,22}; // // JDK1.5,没有下标,增强型for循环 // for(int array: arrays){ // System.out.println(array); // } int[] reverse = reverse(arrays); printArray(reverse); } //反转数组 public static int[] reverse(int[] arrays){ int[] result = new int[arrays.length]; for (int i = 0,j = result.length - 1; i < arrays.length; i++,j--) { result[j] = arrays[i]; } return result; } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]+" "); } }
//结果 22 21 17 16
二维数组 a 可以看出一个十六行二十一列的数组
int a[][] = new int[16][21];
public static void main(String[] args) { //[4][2] /* 1,5 array[0] 15,20 array[1] 16,21 array[2] 17,22 array[3] */ int[][] array = {{1,5},{15,20},{16,21},{17,22}}; // System.out.println(array[0][0]); // System.out.println(array.length); // System.out.println(array[0].length); // printArray(array[0]); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j]+" "); } }
// 结果 1 5 15 20 16 21 17 22
具有以下常用功能
给数组赋值:通过fill方法
给数组排序:通过sort方法,按升序
比较数组:通过equals方法比较数组中元素值是否相等
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作
public static void main(String[] args) { int[] a = {17,20,16,22}; // System.out.println(a); //打印数组元素Arrays.toString System.out.println(Arrays.toString(a)); // printArray(a); //数组进行排序 Arrays.sort(a); System.out.println(Arrays.toString(a)); Arrays.fill(a,17); System.out.println(Arrays.toString(a)); }
//结果 [17, 20, 16, 22] [16, 17, 20, 22] [17, 17, 17, 17]
冒泡的代码相当简单,两层循环,外层冒泡轮数,里层依次比较
嵌套循环,时间复杂度为O(n^2)
public static void main(String[] args) { int[] a = {1,5,15,16,17,18,22,21}; //调用完我们自己写的排序方法以后,返回一个排序后的数组 int[] sort = sort(a); System.out.println(Arrays.toString(sort)); } public static int[] sort(int[] array){ //优化:通过flag标识为减少没有意义的比较 boolean flag = false; //临时变量 int temp = 0; //外层循环,判断我们这个要走多少次; for (int i = 0; i < array.length-1; i++) { //内层循环,比较判断两个数,如果第一个数比第二个数大,则交换位置 for (int j = 0; j < array.length-1-i; j++) { if (array[j+1]>array[j]){ temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; flag = true; } } if (flag==false){ break; } } return array; }
//结果 [22, 21, 18, 17, 16, 15, 5, 1]
稀疏数组的处理方式是:
记录数组一共有几行几列,有多少个不同值
把具有不同 值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
public static void main(String[] args) { //1.创建一个二维数组 20*20 0:没有棋子 1:黑棋 2.白棋 int[][] array1 = new int[20][20]; array1[1][5] = 1; array1[15][17] = 2; //输出原始的数组 System.out.println("输出原始的数组"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } System.out.println("============"); //转换为稀疏数组保存 //获取有效值的个数 int sum = 0; for (int i = 0; i < 20; i++) { for (int j = 0; j < 20; j++) { if(array1[i][j]!=0){ sum++; } } } System.out.println("有效值的个数:"+sum); //2.创建一个稀疏数组的数组 int[][] array2 = new int[sum+1][3]; array2[0][0] = 20; array2[0][1] = 20; array2[0][2] = sum; //遍历二维数组,将非零得值,存放稀疏数组中 int count = 0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { if (array1[i][j]!=0){ count++; array2[count][0] = i; array2[count][1] = j; array2[count][2] = array1[i][j]; } } } //输出稀疏数组 System.out.println("稀疏数组"); for (int i = 0; i < array2.length; i++) { System.out.println(array2[i][0]+"\t" +array2[i][1]+"\t" +array2[i][2]+"\t"); } System.out.println("==============="); System.out.println("还原"); //1.读取稀疏数组 int[][] array3 = new int[array2[0][0]][array2[0][1]]; //2.给其中的元素还原它的值 for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]] = array2[i][2]; } //3.打印 System.out.println("输出还原的数组"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } }
//结果 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ============ 有效值的个数:2 稀疏数组 20 20 2 1 5 1 15 17 2 =============== 还原 输出还原的数组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 进程已结束,退出代码0